mybatis like模糊查詢特殊字符報錯轉義處理方式
like模糊查詢特殊字符報錯轉義處理
方案1
<if test="projectName!=null and projectName!=''"> <bind name="projectName_" value="'%'+projectName+'%'"/> AND info.name like #{projectName_} </if>
方案2
<if test="projectName!=null and projectName!=''"> AND info.name like concat('%',#{projectName_},'%') </if>
like模糊查詢中包含有特殊字符(_、\、%)
使用MyBatis中的模糊查詢時,當查詢關鍵字中包括有_、\、%時,查詢關鍵字失效。
- 當like中包含_時,查詢仍為全部,即 like '%_%'查詢出來的結果與like '%%'一致,並不能查詢出實際字段中包含有_特殊字符的結果條目
- like中包括%時,與1中相同
- like中包含\時,帶入查詢時,%%無法查詢到包含字段中有\的條目
處理
工具類:特殊字符轉義
import org.apache.commons.lang3.StringUtils; public class EscapeUtil { //mysql的模糊查詢時特殊字符轉義 public static String escapeChar(String before){ if(StringUtils.isNotBlank(before)){ before = before.replaceAll("\\\\", "\\\\\\\\"); before = before.replaceAll("_", "\\\\_"); before = before.replaceAll("%", "\\\\%"); } return before ; } }
註意
以上方法在關鍵字中包含有\可能會失效,失效的原因是由於查詢的關鍵字的數據庫字段排序規則為utf8_unicode_ci,要想不失效,查詢的關鍵字的排序規則必須為utf8_general_ci,或者統一全部數據庫字符集與排序規則分別為:utf8mb4與utf8mb4_general_ci
這些僅為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mybatis/mybatis-plus模糊查詢語句特殊字符轉義攔截器的實現
- MySQL校對規則(COLLATION)的具體使用
- 詳細談談MYSQL中的COLLATE是什麼
- java開發validate方法中校驗工具類詳解
- Springboot微服務項目整合Kafka實現文章上下架功能