MybatisPlus更新时部分失败问题

文章介绍了在使用MybatisPlus时遇到的部分字段更新失败的问题,通过分析发现是由于MybatisPlus的默认插入和更新策略导致空值或空字符串字段不更新。解决方案包括修改全局配置为忽略空值策略或对特定字段设置忽略更新策略。作者强调了解新技术的官方文档对于解决问题的重要性。
摘要由CSDN通过智能技术生成

因个人平时使用原生mybatis, 以及通用mapper比较多,对于MybatisPlus仅仅了解,使用不多,在一次简单的更新操作时,出现了某些字段更新失败的问题,记录一下.

1 问题模拟

1 添加依赖

在spring环境添加下面依赖包,如springboot环境,则添加另一个依赖包.

spring环境

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.4.0</version>
        </dependency>

springboot环境

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

2 添加实体对象

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("dev_student") // 表名
public class Student {

    // 主键
    @TableId
    private String id;

    private String score;

    private String name;

    private Integer age;

    private Date creatTime;

    private String desc;
    
}

3 模拟调用

    @Test
    public void testUpdateById(){
        // 参数从前端传递,此处模拟获取
        Student student = new Student();
        student.setId("1111");
        student.setName("小明");
        student.setAge(18);
        student.setCreatTime(new Date());
        // 模拟前端更新 删除了备注信息
        student.setDesc("");
        // 模拟前端更新 将字段指为空传递
        student.setScore(null);

        studentMapper.updateById(student);
    }

4 查询结果

SQL语句目标: 将id为1111的对应的表字段更新为我们设置的值.

执行结果: 发现id为1111的数据,其他信息都进行了修改,备注和分数字段没有被修改.不符合我们的目标要求.

2 问题分析

根据上述问题分析,怀疑是不是配置有问题,导致数据没有更新成功.

官网简介 | MyBatis-Plus (baomidou.com)

查询了一下官网信息:

mybatis-plus 配置文件后,有个global-config 全局配置,里面配置了更新、插入策略。

全局策略有:

  • IGNORED:忽略
  • NOT_NULL:非 NULL,默认策略
  • NOT_EMPTY:非空

关于mybatis-plus插入或更新的字段有 空字符串 或者 null 时,默认是不进行更新数据库的.

此外,还能对单个字段进行插入或更新设置.

关联的字段策略有:

  • IGNORED:忽略
  • NOT_NULL:非 NULL,默认策略
  • NOT_EMPTY:非空
  • NEVER 从不更新,不管字段是否有值,都不进行更新
  • DEFAULT 追随全局配置

问题解决

1 全局设置

mybatis-plus:
  global-config:
    db-config:
      update-strategy: IGNORED

2 字段设置

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("dev_student")
public class Student {

    @TableId
    private String id;

    private String score;

    private String name;

    private Integer age;

    private Date creatTime;

    // 更新时 忽略 不做判空和null校验
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String desc;

}

3 问题总结

关于mybatis-plus更新时部分字段失败的问题, 查看官方文档后,很容易知道问题在哪里,修改起来也很方便. 对于未知的新技术,需要多多去学习和关注官方文档,才能更好的使用它.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值