解决mybatisPlus中的field-strategy配置失效问题
场景:
前端修改给后台传递了⼏个空字符串。后台使⽤mybatisPlus 作为dao层。结果发现空字符串也更新了,mybatisPlus 的field-strategy设置为 2 ⾮空;
解决思路:
查看mybatisPlus 版本差异。发现field-strategy已经弃⽤,从3.1.2 后使⽤下⾯这⼏个配置对⾮空进⾏判断
insertStrategy
null官方更新地址类型:batisplus.annotation.FieldStrategy
默认值:NOT_NULL
字段验证策略之 insert
说明:
在 insert 的时候的字段验证策略⽬前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link
#fieldStrategy} 为准
#updateStrategy
类型:batisplus.annotation.FieldStrategy
默认值:NOT_NULL
字段验证策略之 update
说明:
在 update 的时候的字段验证策略⽬前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link
#fieldStrategy} 为准
#selectStrategy(since 3.1.2)
类型:batisplus.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).ApplyTeacher() == 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:默认的,⼀般只⽤于注解⾥。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。