Mybatis |
您所在的位置:网站首页 › mybatisplus更新空字段 › Mybatis |
公司开始将持久层框架替换成了Mybatis-plus,而使用Mybatis-plus时就会遇到一个很诡异的问题,就是你想更新数据库的某个字段为null时,使用以下写法: LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper(); wrapper.set(Entity::getField,null); wrapper.eq(Entity::getId,1); this.update(wrapper)你会发现毫无效果,打印出SQL查看,你也会发现根本没有该字段update...set...的记录,这是为什么呢?这是因为Mybatis-plus在更新的时候做了null判断,默认不更新为null的传参字段,但业务如此,我们应该怎么写呢? 方式一:调整全局的验证策略注入配置 GlobalConfiguration 属性 fieldStrategy 方式二:调整字段验证注解根据具体情况,在需要更新的字段中调整验证注解,如验证非空: @TableField(strategy=FieldStrategy.NOT_EMPTY) 方式三:使用 UpdateWrapper (3.x)使用以下方法来进行更新或插入操作: mapper.update( null, Wrappers.lambdaUpdate() .set(Entity::getField, null) .eq(Entity::getId, 2) );也可以是下面的写法 UpdateWrapper updateWrapper = new UpdateWrapper(); updateWrapper.set("field", null); updateWrapper.eq("id", 2) this.update(updateWrapper);但是这种写法是会写死实体的字段名称,不易于拓展,不推荐。 这里的话,我比较推荐使用第三种方式,因为他不需要在代码配置改动什么的,只需要在业务代码自定义修改想要修改的实体字段,较为灵活。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |