解决mybatisPlus 中的field-strategy配置失效问题
场景:
前端修改给后台传递了几个空字符串。后台使用mybatisplus 作为dao层。结果发现空字符串也更新了,mybatisplus 的field-strategy设置为 2 非空;
解决思路:
查看mybatisplus 版本差异。发现field-strategy已经弃用,从3.1.2 后使用下面这几个配置对非空进行判断
insertstrategy
类型:com.baomidou.mybatisplus.annotation.fieldstrategy
默认值:not_null
字段验证策略之 insert
说明:
在 insert 的时候的字段验证策略 目前没有默认值,等 {@link #fieldstrategy} 完全去除掉,会给个默认值 not_null 没配则按 {@link #fieldstrategy} 为准
#updatestrategy
类型:com.baomidou.mybatisplus.annotation.fieldstrategy
默认值:not_null
字段验证策略之 update
说明:
在 update 的时候的字段验证策略 目前没有默认值,等 {@link #fieldstrategy} 完全去除掉,会给个默认值 not_null 没配则按 {@link #fieldstrategy} 为准
#selectstrategy(since 3.1.2)
类型:com.baomidou.mybatisplus.annotation.fieldstrategy
默认值:not_null
字段验证策略之 select
说明:
在 select 的时候的字段验证策略: wrapper 根据内部 entity 生成的 where 条件 目前没有默认值,等 {@link #fieldstrategy} 完全去除掉,会给个默认值 not_null 没配则按 {@link #fieldstrategy} 为准
补充:mybatisplus中的field-strategy(字段更新插入策略):null值插入和更新问题
mybatisplus中null值插入和更新问题
配置mybatisplus的项目中,默认进行了不是全量更新的策略:not_null。
即在利用updatewrapper更新时,会做null判断,如果传参数为null,就不会更新。
在实际项目需求中可能配置全局更新策略为:not_null,但是某些场景更新时需要插入这个null值进行更新。如何解决这个问题呢?
实际项目解决方法示例一
实际项目中,配置文件中配置全局字段策略为not_null。
需求:实际项目中,apply_teacher字段当它为null时需要把null值更新进去。
困难:因为全局字段策略为not_null,所以默认不会更新null值进去。
解决方法:
利用条件构造器当值为null时set为null。
代码:
wrapper<stuapplyinfoentity> updatewrapper = new updatewrapper<>(); ((updatewrapper) updatewrapper).set(saveapply.getapplyteacher() == null, "apply_teacher", null);
实际项目解决方法示例二
需求:state字段所有值都更新和插入。
困难:因为全局字段策略为not_null,所以默认不会更新null值进去。
解决方法:
在entity中设置state设置注解@tablefield(),配置fieldstrategy为ignored。意思是"忽略判断",所有值都更新和插入。
代码:
@tablefield(strategy = fieldstrategy.ignored, el = "state, jdbctype=varchar") private string state;
field-strategy字段更新插入策略介绍
枚举类fieldstrategy源码
public enum fieldstrategy { /** * 忽略判断 */ ignored, /** * 非null判断 */ not_null, /** * 非空判断 */ not_empty, /** * 默认的,一般只用于注解里 * <p>1. 在全局里代表 not_null</p> * <p>2. 在注解里代表 跟随全局</p> */ default }
枚举类字段简介
ignored:“忽略判断”,所有字段都更新和插入。
not_null:“非 null 判断”,只更新和插入非null值。
not_empty:“非空判断”, 只更新和插入非null值且非空字符串。
default: 默认的,一般只用于注解里。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
上一篇: 这秘书真丑
推荐阅读
-
MySQL中配置文件my.cnf因权限问题导致无法启动的解决方法
-
@DS注解在 @PostConstruct 事件中失效的问题解决 javamybatisplusspringboot
-
@DS注解在 @PostConstruct 事件中失效的问题解决 javamybatisplusspringboot
-
Angularjs中date过滤器失效的问题及解决方法
-
解决idea中yml文件图标问题及自动提示失效的情况
-
解决Nginx下ThinkPHP框架中的U方法失效问题
-
flutter中build.gradle仓库的配置(解决外网下载速度过慢失败的问题)
-
MybatisPlus的IPage失效的问题解决方案
-
Filezilla server配置FTP服务器中的各种问题与解决方法
-
mybatisplus @Select注解中拼写动态sql异常问题的解决