MybatisPlus查詢條件空字符串和NULL問題背景分析
MybatisPlus查詢條件空字符串和NULL問題背景分析
MP依賴版本
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.1.tmp</version>
</dependency>問題背景
在使用MP實現(xiàn)條件查詢時,如果入?yún)閚ull或者""時,則MP還是會把其當(dāng)做條件去執(zhí)行如圖:


入?yún)ⅲ?/p>

MP官方文檔給出解決方案:https://mp.baomidou.com/config/#insertstrategy
個人建議增加全局配置:mybatis-plus: global-config: db-config: select-strategy: not_empty
但是又出現(xiàn)一個新的問題,id為""時,仍然不會被QueryWrapper屏蔽掉,還是會被當(dāng)做條件去查詢
入?yún)?/p>

執(zhí)行語句

支持非空字段判斷拼接
LambdaUpdateWrapper<Orders> wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(!order.getState().sEmpty(),Orders::getState, orders.getState());
補(bǔ)充:MyBatis-Plus過濾查詢條件中的空字符串
MyBatis-Plus過濾查詢條件中的空字符串
在使用MyBatis-Plus查詢時,若封裝查詢條件的Bean中有屬性為空字符串,是不會被過濾掉的,結(jié)果就是執(zhí)行的SQL的where條件中出現(xiàn)某個字段="",導(dǎo)致查詢出問題。尤其常見于,在前端頁面輸入該字段的查詢條件后,又清空輸入的關(guān)鍵字。
老規(guī)矩,先說MyBatis-Plus版本:3.3.0
有2種思路:
在Bean中給字段通過注解,過濾查詢時的空字符串;
// value指代對應(yīng)的數(shù)據(jù)表的字段名稱,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,
/**
* 默認(rèn)的,一般只用于注解里
* <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官網(wǎng)配置介紹頁面。需要注意的是,在yml配置文件中的配置,不是像官網(wǎng)上的駝峰命名方法。
使用配置 | MyBatis-PlusMyBatis-Plus 官方文檔。
到此這篇關(guān)于MybatisPlus查詢條件空字符串和NULL問題背景分析的文章就介紹到這了,更多相關(guān)MybatisPlus查詢條件空字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Spring Data JPA動態(tài)條件查詢的寫法
本篇文章主要介紹了Spring Data JPA動態(tài)條件查詢的寫法 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
聊聊SpringBoot使用Nacos進(jìn)行服務(wù)注冊發(fā)現(xiàn)與配置管理問題
Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn)(可以作為springcloud的注冊中心)、動態(tài)配置服務(wù)(可以做配置中心)、動態(tài)?DNS?服務(wù)。本文重點給大家介紹SpringBoot使用Nacos進(jìn)行服務(wù)注冊發(fā)現(xiàn)與配置管理,感興趣的朋友一起看看吧2022-01-01
SpringBoot利用Redis實現(xiàn)防止訂單重復(fù)提交的解決方案
在涉及訂單操作的業(yè)務(wù)中,防止訂單重復(fù)提交是一個常見需求,用戶可能會因誤操作或網(wǎng)絡(luò)延遲而多次點擊提交訂單按鈕,導(dǎo)致訂單重復(fù)提交,所以本文給大家介紹了SpringBoot利用Redis實現(xiàn)防止訂單重復(fù)提交的解決方案,需要的朋友可以參考下2024-10-10
Java中的內(nèi)存模型(JMM)和鎖機(jī)制詳解
這篇文章主要介紹了Java中的內(nèi)存模型(JMM)和鎖機(jī)制使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
解決Maven項目pom.xml導(dǎo)入了Junit包還是用不了@Test注解問題
在Maven項目中,如果在非test目錄下使用@Test注解,可能會因為pom.xml中<scope>test</scope>的設(shè)置而無法使用,正確做法是將測試代碼放在src/test/java目錄下,或去除<scope>test</scope>限制,這樣可以確保Junit依賴正確加載并應(yīng)用于適當(dāng)?shù)拇a部分2024-10-10

