MybatisPlus更新时部分失败问题

因个人平时使用原生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更新时部分字段失败的问题, 查看官方文档后,很容易知道问题在哪里,修改起来也很方便. 对于未知的新技术,需要多多去学习和关注官方文档,才能更好的使用它.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus提供了更新操作的功能,可以通过id更新或者条件更新更新数据库中的数据。在实际编写项目,我们可以根据个人的习惯选择使用哪种方法。更新操作的参数可以通过UpdateWrapper来设置。在使用UpdateWrapper,我们可以使用set方法来设置要更新的字段,eq方法来设置更新的条件。例如,我们可以使用如下代码来进行条件更新: ```java UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.set("user_name", "心态").set("user_email", "8888888@qq.com").eq("user_status", "1"); int result = userMapper.update(null, wrapper); System.out.println("result => " + result); ``` 在上述代码中,我们通过设置UpdateWrapper的set方法来设置要更新的字段,使用eq方法来设置更新的条件。最后,我们调用update方法来进行更新操作,并将结果保存在result变量中。通过打印result,我们可以获取更新操作的结果。这就是MyBatis-Plus更新操作的基本使用方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MyBatis-Plus中的更新操作(通过id更新和条件更新)](https://blog.csdn.net/weixin_52258054/article/details/128051273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值