首页 > 其他分享 >MyBatis-Plus修改数据,会不会把其他字段置为null

MyBatis-Plus修改数据,会不会把其他字段置为null

时间:2022-10-03 11:24:05浏览次数:49  
标签:updateWrapper update 修改 Plus sysUser MyBatis null png avatar

前两天在用MyBatis-Plus写了一张单表的增删改查,在写到修改的时候,就突然蹦出一个奇怪的想法。

MyBatis-Plus的BaseMapper中有两个关于修改的方法。如下:

int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

就我在想,在修改的时候,给这个entity个别字段赋值,部分字段不管它,在调用update方法的时候,会不会在修改完之后,数据库的其他字段被置为null。

开始测试

1.测试updateById方法

首先这是未修改之前的数据

点击查看测试代码
@Test
    public void testUpdateById() {
        SysUser sysUser = new SysUser();
        sysUser.setId(1569971954553761794L);
        sysUser.setAvatar("abc.png");
        sysUser.setMobilePhoneNumber("13266669999");
        int i = sysUserMapper.updateById(sysUser);
        log.info("flag:{}",i);
    }

这是执行完测试代码后的数据,很明显在修改完指定字段的同时,其他没有被指定的字段没有被修改。

再看一下该代码所执行的sql
UPDATE ms_sys_user SET avatar=?, mobile_phone_number=? WHERE id=?

2.测试update方法

这个update方法是可以进行批量修改的,符合匹配条件的数据都会被修改。

首先这是未修改之前的数据

测试代码中的两种写法等价,出来的sql都是一样的。

点击查看测试代码
@Test
    public void testUpdate() {
        UpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("avatar","1.png")
                .set("avatar","12.png");
        SysUser sysUser = new SysUser();
        sysUser.setEmail("[email protected]");
        sysUserMapper.update(sysUser, updateWrapper);
    }

 @Test
    public void testUpdate() {
        UpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("avatar","1.png")
                .set("avatar","12.png")
                .set("email","[email protected]");
        sysUserMapper.update(null, updateWrapper);
    }

这是执行完update方法之后的数据,可以明显的看到两条符合匹配条件的数据都被修改了,并且其他不相关的字段还是原来的。

执行的sql如下
Preparing: UPDATE ms_sys_user SET email=?, avatar=? WHERE (avatar = ?)
Parameters: [email protected](String), 12.png(String), 1.png(String)

综上所试:

在执行修改方法的时候,在不指定其他字段时候,默认只会修改实体中指定字段的值,那些没有被指定的字段不会被置为null。

标签:updateWrapper,update,修改,Plus,sysUser,MyBatis,null,png,avatar
From: https://www.cnblogs.com/huoyl/p/sn1.html

相关文章

  • SpringBoot--手动校验@NotBlank、@NotNull等的工具类
    ​简介说明        本文介绍手动校验@NotBlank、@NotNull等的工具类。    使用场景:controller接口的入参很多,需要他人提供,但他人提供的类的字段很多,字段都......
  • h5:vue3 + ts + vite + vuex + axios + vant4 + scss + postcss+mockjs+element-plus
    模板地址:https://gitee.com/zhang_meng_lei/mobile-template-h5-vue3/tree/master安装element-plus:yarnaddelement-plus(目前已导入但未实现代码)按需导入:https://el......
  • MybatisPlus学习之MyBatisX插件比代码生成器还好用的哦
    一、MyBatisX的作用:1.​​xml​​​跳转2.生成代码3.重置代码4.JAP提示跟代码生成器比较:代码生成器生成文件还有controller等文件,而mybatsx没有,但是代码生成器生成的mapper......
  • Mybatis入门
    一、Mybatis简介1、MyBatis历史MyBatis是一个封装了jdbc的持久层框架,最初是Apache的一个开源项目iBatis,2010年随着开发团队转投GoogleCode旗下,iBatis3.x正式更名为M......
  • Spring整合Mybatis连接MySQL数据库配置 异常 情景再现
    Spring整合Mybatis连接MySQL数据库配置情景再现注意点一:数据库Table表字段和Entity实体类属性名不匹配解决:方法一:开启下划线转大驼峰命名mybatis:configurati......
  • 读取文章内容时,.equals("")和== null的区别
    filename="Questions\\Records";Filefile=newFile(filename);FileReaderfr=newFileReader(file);BufferedReaderbr=newBufferedReader(fr);Stringline=b......
  • MyBatis
    ​*本人刚刚学完MyBatis,于是想浅显的总结一下。如有错误,麻烦各位大佬们在评论区指出,谢谢。*最开始认识MyBatis这个单词,是在学习MySQL的时候看到的。那个时候完全不知......
  • MyBatis
    MyBatis1、搭建MyBatis1.1环境配置与工程<dependencies><!--Mybatis核心--><dependency><groupId>org.mybatis</groupId><artifactId>my......
  • vue3 + element plus实现侧边栏
    一般前端项目少不了侧边栏。如图所示这些鬼东西特别繁琐,所以我们喜欢找些现成、开源的所谓后台管理的前端框架,开箱即用。方便是方便,而且做得还挺好,问题是,有学习成本,要按照......
  • PDF-XChange Editor Plus
      ......