目录

情况一:不需要更新进数据库

情况二:需要更新进数据库 (推荐方法3)


情况一:不需要更新进数据库

        方法1:直接用sql语句方式,需要更新哪个字段就set xxclounm 即可

        方法2:使用mybatis带的方法 updateById(Entry entry),传入entry对象只设置需要更新字段即可。

解析:mybatis-plus在update时对null字段有三种处理策略分别是:

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

默认策略是忽略null字段,所以只需要将entry中不需要更新的字段不做处理即可。注意:如果entry中字段设置为空字符串" " 则会更新进数据库

        方法3:使用updateWapper,其实和方法2原理一样 如下例子只更新age字段 ,同样受更新策略影响

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name","rhb");
User user = new User();
user.setAge(18);
userMapper.update(user, updateWrapper);

情况二:需要更新进数据库 (推荐方法3)

        方法1:直接用sql语句方式,需要更新哪个字段就set xxclounm 即可

        方法2:使用mybatis带的方法 updateById(Entry entry),传入entry对象只设置需要更新字段即可。另外在entry类中需要更新null的字段上加上注解updateStrategy 如下面例子

    /**
     * 单位
     */
    @TableField(value = "UNIT", updateStrategy = FieldStrategy.IGNORED)
    private String unit;

或者设置全局更新策略(按需要设置单个字段或者全局)

# yml配置
mybatis-plus:
  global-config:
    db-config:
      field-strategy: not_empty

        方法3:使用updateWapper,不受更新策略影响。推荐此方法,设置完策略后别人在不知情情况下可能会在不想设置null时将你设置的字段更新为空

LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getName, "rhb").set(User::getAge, null);
Integer rows = userMapper.update(null, lambdaUpdateWrapper);

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐