【一月笔记】

【一月笔记】,第1张

【一月笔记】

这里写自定义目录标题
  • 简单增删改查遇到问题(2022/1/4)
    • 代码controller层
    • service接口
    • serviceImpl实现类
    • daoMapper映射接口
    • mapper.xml配置文件
    • entity实体类
    • 问题一
    • 问题二
    • 问题三
    • 问题四
    • 问题五
    • 问题六
    • 问题七
    • 问题八
    • 问题九
    • 补充
      • 指定mybatis日志的具体实现
      • 2.if标签
      • 3.choose标签
      • 4.where标签
      • 5.set标签
      • 6.trim标签
      • 7.foreach标签
      • 注意:

简单增删改查遇到问题(2022/1/4)

入职第一天写的增删改查遇到的问题。

代码controller层
//controller层
package com.ds.travel.biz.patrol.zx.controller;

import com.ds.travel.biz.patrol.zx.entity.AmContractBasic;
import com.ds.travel.biz.patrol.zx.service.AmContractBasicService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/test")
public class AmContractBasicController {

    @Resource
    private AmContractBasicService amContractBasicService;

//    全部查询
    @RequestMapping("/selectAll")
    public List selectAll(){
        return amContractBasicService.selectAll();
    }

//    id查询
    @RequestMapping("/selectId")
    public AmContractBasic selectAllById(@RequestParam("id") Integer id){
        return amContractBasicService.selectAllById(id);
    }

//    根据id物理删除
    @RequestMapping("/delete")
    public void delete(@RequestParam("id") Integer id){
        amContractBasicService.delete(id);
    }

//    根据id逻辑删除
    @RequestMapping("isDelete")
    public void isDelete(@RequestParam("id") Integer id){
        amContractBasicService.IsDelete(id);
    }

//    添加
    @RequestMapping("/insert")
    public void insert(){
        AmContractBasic amContractBasic = new AmContractBasic();

//            amContractBasic.setContract_code("张三李四");
        amContractBasicService.insert(amContractBasic);

    }

//      修改
    @RequestMapping("/updateId")
    public void update(@RequestParam("id") Integer id){
        AmContractBasic amContractBasic = amContractBasicService.selectAllById(id);
        amContractBasic.setRemark("王五王五");
        amContractBasicService.update(amContractBasic);
    }

}

service接口
package com.ds.travel.biz.patrol.zx.service;

import com.ds.travel.biz.patrol.zx.entity.AmContractBasic;

import java.util.List;

public interface AmContractBasicService {
    List selectAll();

    AmContractBasic selectAllById(Integer id);

    void delete(Integer id);

    void insert(AmContractBasic amContractBasic);

    void update(AmContractBasic amContractBasic);

    void IsDelete(Integer id);
}

serviceImpl实现类
package com.ds.travel.biz.patrol.zx.service.Impl;

import com.ds.travel.biz.patrol.zx.dao.AmContractBasicMapper;
import com.ds.travel.biz.patrol.zx.entity.AmContractBasic;
import com.ds.travel.biz.patrol.zx.service.AmContractBasicService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class AmContractBasicServiceImpl implements AmContractBasicService {

    @Resource
    private AmContractBasicMapper amContractBasicMapper;

    @Override
    public List selectAll() {
        return amContractBasicMapper.selectAll();
    }

    @Override
    public AmContractBasic selectAllById(Integer id) {
        return amContractBasicMapper.selectAllById(id);
    }

    @Override
    public void delete(Integer id) {
        amContractBasicMapper.delete(id);
    }

    @Override
    public void insert(AmContractBasic amContractBasic) {
        amContractBasicMapper.insert(amContractBasic);
    }

    @Override
    public void update(AmContractBasic amContractBasic) {
        amContractBasicMapper.update(amContractBasic);
    }

    @Override
    public void IsDelete(Integer id) {
        amContractBasicMapper.IsDelete(id);
    }
}

daoMapper映射接口
package com.ds.travel.biz.patrol.zx.dao;

import com.ds.travel.biz.patrol.zx.entity.AmContractBasic;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.stereotype.Repository;

import java.util.List;
//@MapperScan("com.ds.travel.biz.patrol.zx.dao")
@Repository
public interface AmContractBasicMapper{
    List selectAll();

    AmContractBasic selectAllById(Integer id);

    void delete(Integer id);

    void insert(AmContractBasic amContractBasic);

    void update(AmContractBasic amContractBasic);

    void IsDelete(Integer id);
}


mapper.xml配置文件





    
    
        select * from am_contract_basic where id = #{id}
    

    
    
        delete from am_contract_basic where id = #{id}
    

    
    
        INSERT INTO `travel`.`am_contract_basic` (`id`, `company_id`, ...) VALUES (null, 1, '2', ...)

    

    
    

        update am_contract_basic
        set company_id = #{companyId,jdbcType=BIGINT},
            contract_type = #{contractType,jdbcType=VARCHAR},
            .......    
        where id = #{id,jdbcType=BIGINT}

    
    
    
        update am_contract_basic set is_delete = 1 where id = #{id}
    


entity实体类
package com.ds.travel.biz.patrol.zx.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;


@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class AmContractBasic implements Serializable {
    
    private Long id;

    
    private Long companyId;

   ..........
}


## pom.xml配置文件


    4.0.0

    
        com.ds.travel
        ds-travel-parent
        1.0.0
    

    ds-travel-biz-patrol
    ${project.version}

    
        
            com.jt.sjzx
            jt-common-spring
        
        
            com.ds.travel
            ds-travel-biz-sys
        
    



     
问题一
  • mapper文件找不到

  • [ 错误解决]
    直接在AmContractBasicMapper文件中加入的@MapperScan("com.ds.travel.biz.patrol.zx.dao")注解标记以为能添加进去,但实际上根本没用

  • [正确解决后]
    在@EnableTransactionManagement注解的启动类里面添加的@MapperScan("com.ds.travel.biz.patrol.zx.dao")注解标记,这才将mapper接口加入组件管理

问题二
  • 实体类未加入组件管理

  • [ 解决一]
    实体类中添加TableName()注解和数据库对应的实体类名@TableName("am_contract_basic")

  • [解决二]
    直接继承Serializable

public class AmContractBasic implements Serializable{ }
问题三

未将AmContractBasicMapper文件添加到组件管理

AmContractBasicMapper文件中加入
	@Repository注解加入组件管理	
问题四

获取insert和update的SQL语句

  • 方式一

直接在Navicat里面右击表复制语句

  • 方式二

使用database插件右击表选择mybatis-generator导出xml文件

问题五

select查询Postman获取到的值为空

  • 方式一
  1. 修改yml文件中的configuration(不建议)
    configuration: map-underscore-to-camel-case: false
  • 方式二
  1. 实体类中采用驼峰命名规则与数据库里面的字段名匹配,xml文件里面默认匹配的也是驼峰
    configuration: map-underscore-to-camel-case: true

问题六

yml文件中SQL参数索引报错

Parameter index out of range (2 > number of parameters, which is 1).
参数指标的范围(2 >参数的数量,也就是1)

  • 解决
    Mysql语句里面不能加注释,不然会报错
问题七

实际用从Navicat复制过来mysql的静态值不报错,但全部切换成#{}动态的获取值报错,将update的mysql语句参数修改为 id = #{id}…形式如下报错误

There is no getter for property named 'updateId' in 'class com.ds.travel.biz.patrol.zx.entity.AmContractBasic'
(类中没有名为“ updateid”的属性的 getter 方法)

  • 错误原因
    实体类中的成员变量与mysql语句的字段名不匹配
  • 解决
    重写了实体类中的
问题八

使用update实现数据的删除

  • 解决
    逻辑删除:update修改is_delete字段值 1是0否
问题九

传输JSON格式实体类给后台处理

在形参中添加@RequestBody注解标签
json格式的数据转为java对象

public void trendsUpdate(@RequestBody AmContractBasic amContractBasic){
        amContractBasicService.trendsUpdate(amContractBasic);
    }
补充
  • MySql的动态拼接
    MyBatis动态SQL
    是MyBatis框架中的特性之一,在一些组合查询页面需要根据用户输入的条件的不同,来生成不同的查询SQL语句,
    在jdbc或者是其它类似框架中需要在代码中拼接SQL语句,导致容易出错,MyBatis动态SQL可以解决这种问题。
    动态SQL标签与jstl标签相似,允许在xml中构建不同的SQL语句
    常用:

判断标签: if、choose(when,otherwise)
关键字标签: where、set、trim
循环标签: foreach
拼接: bind

value里面拼接字符串

指定mybatis日志的具体实现
  1.  
    
		
			
			
2.if标签
	简单的条件判断逻辑,满足指定条件时,追加if标签内的语句块,不满足时,不追加
			
	if标签最常见的使用在where字句部分,根据不同的情况追加不同的SQL语句
			
				SQL语句1
				
					
						SQL语句2
					
					
						SQL语句3
					
					.....
					
						SQL语句4
					
				
				
4.where标签
	可以在标签所在的位置输出一个where关键字,而且还可以将后面多余的and或者or关键字去除
	格式: