时间:2021-05-19
前端修改给后台传递了几个空字符串。后台使用mybatisPlus 作为dao层。结果发现空字符串也更新了,mybatisPlus 的field-strategy设置为 2 非空;
查看mybatisPlus 版本差异。发现field-strategy已经弃用,从3.1.2 后使用下面这几个配置对非空进行判断
类型:com.baomidou.mybatisplus.annotation.FieldStrategy
默认值:NOT_NULL
字段验证策略之 insert
说明:
在 insert 的时候的字段验证策略 目前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link #fieldStrategy} 为准
类型:com.baomidou.mybatisplus.annotation.FieldStrategy
默认值:NOT_NULL
字段验证策略之 update
说明:
在 update 的时候的字段验证策略 目前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link #fieldStrategy} 为准
类型:com.baomidou.mybatisplus.annotation.FieldStrategy
默认值:NOT_NULL
字段验证策略之 select
说明:
在 select 的时候的字段验证策略: wrapper 根据内部 entity 生成的 where 条件 目前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link #fieldStrategy} 为准
补充:mybatisPlus中的field-strategy(字段更新插入策略):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;枚举类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: 默认的,一般只用于注解里。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
发现mybatisPlus会更新对象属性为null的值,与field-strategy配置有关mybatis-plus:global-config:db-con
开发调试的时候发现MybatisPlus的逻辑删除失效了,看了下配置文件发现没有问题,通过查看以下源码发现逻辑删除需要注入的bean,查看这个bean的源码如下
前言在MybatisPlus3.4.0版本之后PaginationInterceptor插件就失效,新增MybatisPlus3.4.0的新内置插件提示:以下是
解决方法:补充:idea中yml文件图标小绿叶变成小网格问题及自动提示失效解决方法idea中yml文件图标小绿叶变成小网格问题及自动提示失效解决方法.yml文件
Ubuntu14.04重启后DNS配置丢失问题的解决方案每次修改DNS配置文件/etc/resolv.conf重启后就会失效。从网上查知,这个文件是动态创建,所