MybatisPlus查询条件空字符串和NULL问题背景分析
作者:ChrisitineTX
MybatisPlus查询条件空字符串和NULL问题背景分析
MP依赖版本
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.1.tmp</version>
</dependency>问题背景
在使用MP实现条件查询时,如果入参为null或者""时,则MP还是会把其当做条件去执行如图:


入参:

MP官方文档给出解决方案:https://mp.baomidou.com/config/#insertstrategy
个人建议增加全局配置:mybatis-plus: global-config: db-config: select-strategy: not_empty
但是又出现一个新的问题,id为""时,仍然不会被QueryWrapper屏蔽掉,还是会被当做条件去查询
入参

执行语句

支持非空字段判断拼接
LambdaUpdateWrapper<Orders> wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(!order.getState().sEmpty(),Orders::getState, orders.getState());
补充:MyBatis-Plus过滤查询条件中的空字符串
MyBatis-Plus过滤查询条件中的空字符串
在使用MyBatis-Plus查询时,若封装查询条件的Bean中有属性为空字符串,是不会被过滤掉的,结果就是执行的SQL的where条件中出现某个字段="",导致查询出问题。尤其常见于,在前端页面输入该字段的查询条件后,又清空输入的关键字。
老规矩,先说MyBatis-Plus版本:3.3.0
有2种思路:
在Bean中给字段通过注解,过滤查询时的空字符串;
// value指代对应的数据表的字段名称,whereStrategy 指定查询时的过滤策略 @TableField(value = "PATIENT_NAME", whereStrategy = FieldStrategy.NOT_EMPTY) private String patientName;
查看源码源码得知,一共有5种字段策略(5种策略也可用于INSERT或UPDATE语句),如下:
package com.baomidou.mybatisplus.annotation;
/**
* 字段策略枚举类
*
* @author hubin
* @since 2016-09-09
*/
public enum FieldStrategy {
/**
* 忽略判断
*/
IGNORED,
/**
* 非NULL判断
*/
NOT_NULL,
/**
* 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
*/
NOT_EMPTY,
/**
* 默认的,一般只用于注解里
* <p>1. 在全局里代表 NOT_NULL</p>
* <p>2. 在注解里代表 跟随全局</p>
*/
DEFAULT,
/**
* 不加入 SQL
*/
NEVER
}2.在配置文件中,全局配置,以SpringBoot为例。(推荐)
mybatis-plus:
global-config:
db-config:
select-strategy: not_empty更多配置可参考MyBatis-Plus官网配置介绍页面。需要注意的是,在yml配置文件中的配置,不是像官网上的驼峰命名方法。
使用配置 | MyBatis-PlusMyBatis-Plus 官方文档。
到此这篇关于MybatisPlus查询条件空字符串和NULL问题背景分析的文章就介绍到这了,更多相关MybatisPlus查询条件空字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
