解决mybatisPlus 中的field-strategy配置失效问题

 更新时间:2021年02月03日 11:22:29   作者:胡GaQue  
这篇文章主要介绍了解决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: 默认的,一般只用于注解里。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Spring MVC接受表单自动封装特性实例解析

    Spring MVC接受表单自动封装特性实例解析

    这篇文章主要介绍了Spring MVC接受表单自动封装特性实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • IDEA Eval Reset 使用方法汇总

    IDEA Eval Reset 使用方法汇总

    本文给大家介绍了IDEA Eval Reset 使用方法,安装插件包括离线安装方式和在线安装方式,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Netty分布式客户端处理接入事件handle源码解析

    Netty分布式客户端处理接入事件handle源码解析

    这篇文章主要为大家介绍了Netty源码分析客户端流程处理接入事件handle创建,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 学生视角手把手带你写Java 线程池初版

    学生视角手把手带你写Java 线程池初版

    作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门
    2022-03-03
  • Spring线程池ThreadPoolTaskExecutor配置详情

    Spring线程池ThreadPoolTaskExecutor配置详情

    本篇文章主要介绍了Spring线程池ThreadPoolTaskExecutor配置详情,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java实现简单LRU缓存机制的方法

    Java实现简单LRU缓存机制的方法

    这篇文章主要介绍了Java实现简单LRU缓存机制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Mybatis如何配置连接池

    Mybatis如何配置连接池

    本文通过实例代码给大家详细介绍了mybatis配置连接池的方法,非常不错,具有参考借鉴价值,感兴趣的朋友参考下吧
    2016-12-12
  • Spring Boot 2.7.6整合redis与低版本的区别

    Spring Boot 2.7.6整合redis与低版本的区别

    这篇文章主要介绍了Spring Boot 2.7.6整合redis与低版本的区别,文中补充介绍了SpringBoot各个版本使用Redis之间的区别实例讲解,需要的朋友可以参考下
    2023-02-02
  • java多线程编程之管道通信详解

    java多线程编程之管道通信详解

    这篇文章主要为大家详细介绍了java多线程编程之线程间的通信,探讨使用管道进行通信,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • SpringBoot自定义转换器应用实例讲解

    SpringBoot自定义转换器应用实例讲解

    SpringBoot在响应客户端请求时,将提交的数据封装成对象时,使用了内置的转换器,SpringBoot 也支持自定义转换器,这个内置转换器在 debug的时候,可以看到,提供了124个内置转换器
    2022-08-08

最新评论