进行Update操作时,会将未指定的字段更新为0?

来源:6-1 AR模式

慕标8209245

2020-07-14 16:44

DEBUG==>  Preparing: UPDATE company SET age=?, address=?, salary=? WHERE id = ? 

DEBUG==> Parameters: 12(Integer), 湖南(String), 0(Integer), 20(Integer)

DEBUG<==    Updates: 1

影响记录数: 1

==================================================================================


@RequestMapping("/updateByLambdaWrapper")
public void updateByLambdaWrapper(){
    LambdaUpdateWrapper<CompanyPojo> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
    CompanyPojo companyPojo = new CompanyPojo();
    companyPojo.setAge(12);
    companyPojo.setAddress("湖南");
    lambdaUpdateWrapper.eq(CompanyPojo::getId, 20);
    int update = companyMapper.update(companyPojo, lambdaUpdateWrapper);
    System.out.println("影响记录数: " + update);

}


写回答 关注

3回答

  • 老猿
    2020-07-26 18:12:56

    我怀疑是你的salary属性,没用引用类型,使用的是基本数据类型,基本数据类型作为成员变量,默认值是0。而引用类型,默认值是null。

  • 来一串烤bug
    2020-07-15 11:12:22

    因为你传的那个companyPojo 没有把salary原来的值设值进去,所以他默认你的salary要更新为null,然后可能是你默认的salary是0,所以就给你更新成0了。最好是companyPojo这个替换成null,然后lambdaUpdateWrapper那边用set去作更新。

    lambdaUpdateWrapper.eq(CompanyPojo::getId, 20).setAddress("湖南").setAge(12);
     int update = companyMapper.update(null, lambdaUpdateWrapper);

    这样你的salary就不会受影响

  • 慕标8209245
    2020-07-14 16:56:37

    salary字段代码实体中并未指定更新为0。。sql语句中却将salary更新成0,,这是为啥鸭? 

MyBatis-Plus入门

MyBatis-Plus框架入门必学课程!

56140 学习 · 381 问题

查看课程

相似问题