MyBatis解決模糊查詢包含特殊字符問題
MyBatis解決模糊查詢包含特殊字符
第一塊:MyBatis 實現(xiàn)模糊查詢方式
1.1 sql中字符串拼接
SELECT * FROM 表名 WHERE 字段名 LIKE CONCAT(CONCAT('%', #{參數(shù)}), '%');1 2. 使用 ${...} 代替 #{...}
SELECT * FROM 表名 WHERE 字段名 LIKE '%${參數(shù)}%';?注意:($不能防止sql注入, #{}---> 可以防止sql注入的問題)
1.3 程序中拼接
Java 代碼
String searchText = new StringBuilder("%").append(text).append("%").toString();?
parameterMap.put("text", searchText);Mapper 映射文件
SELECT * FROM 表名 WHERE 字段名 LIKE #{參數(shù)};第二塊:MyBatis 實現(xiàn)特殊字符處理之<![CDATA[ ]]>
2.1 <![CDATA[ ]]> 簡介
它的全稱為character data,以"<![CDATA[ "開始,以" ]]>" 結(jié)束,在兩者之間嵌入不想被解析程序解析的原始數(shù)據(jù),解析器不對CDATA區(qū)中的內(nèi)容進(jìn)行解析,而是將這些數(shù)據(jù)原封不動地交給下游程序處理。
2.2 MyBatis 自動轉(zhuǎn)義特殊字符表
| 特殊字符 | 替代符號 |
| & | & |
| < | < |
| > | > |
| " | " |
| ' | ' |
2.3 <![CDATA[ ]]> 特殊字符
xml 中表示: <= 小于等于、 >= 大于等于 需加 這樣的標(biāo)記: <![CDATA[ ]]> xml中有&的符號,需要
- <![CDATA[&]]>這樣表示&
- <= 小于等于 :<![CDATA[ <= ]]>
- >= 大于等于:<![CDATA[ >= ]]>
第三塊:模糊查詢包含特殊字符
解決辦法:使用 ${...} + <![CDATA[ ]]>
模板:
? <select id="searchAll" parameterType="map" resultType="map">
?? ?SELECT?
?? ??? ?*
? ? FROM ?表名 P
? ?? ?WHERE 1=1?
?? ?<if test="參數(shù) != null and 參數(shù) != ''">
?? ??? ?<![CDATA[ AND P.字段名 LIKE '%${參數(shù)}%']]>
?? ?</if>MyBatis模糊查詢時對特殊字符"%"和"_"的處理
問題
輸入"%“或”_",查詢結(jié)果為全部數(shù)據(jù),且無法查詢到帶有"%"或者下劃線 的數(shù)據(jù)。
解決
對特殊字符轉(zhuǎn)義
例如查詢字段為 name
若name中含有"%“或 “_” 轉(zhuǎn)為”/%" “/ _”
public void setName(String name) {
? ? ? ? this.name = StringUtils.isBlank(name) ? null : EscapeUtil.escapeChar(name);
? ? }package com.xpf.util;
import org.apache.commons.lang3.StringUtils;
/**
?* @Title:EscapeUtil
?* @Package:com.xpf.util
?* @Author: xiapf
?* @Date:2019/9/20
?* @Descrption:
?*/
public class EscapeUtil {
? ? /**
? ? ?* mysql的模糊查詢時特殊字符轉(zhuǎn)義
? ? ?*/
? ? public static String escapeChar(String before){
? ? ? ? if(StringUtils.isNotBlank(before)){
? ? ? ? ? ? before = before.replaceAll("_", "/_");
? ? ? ? ? ? before = before.replaceAll("%", "/%");
? ? ? ? }
? ? ? ? return before.trim() ;
? ? }
}mapper中模糊查詢語句
name like CONCAT('%',#{name},'%') ESCAPE '/'總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實現(xiàn)將結(jié)果集封裝到List中的方法
這篇文章主要介紹了java實現(xiàn)將結(jié)果集封裝到List中的方法,涉及java數(shù)據(jù)庫查詢及結(jié)果集轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-07-07
淺談maven的jar包和war包區(qū)別 以及打包方法
下面小編就為大家分享一篇淺談maven的jar包和war包區(qū)別 以及打包方法,具有很好的參考價值,希望對大家有所幫助2017-11-11
Spring boot從安裝到交互功能實現(xiàn)零基礎(chǔ)全程詳解
這篇文章主要介紹了Spring boot從安裝到交互功能得實現(xiàn)全程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

