MyBatis解決模糊查詢(xún)包含特殊字符問(wèn)題
MyBatis解決模糊查詢(xún)包含特殊字符
第一塊:MyBatis 實(shí)現(xiàn)模糊查詢(xún)方式
1.1 sql中字符串拼接
SELECT * FROM 表名 WHERE 字段名 LIKE CONCAT(CONCAT('%', #{參數(shù)}), '%');
1 2. 使用 ${...} 代替 #{...}
SELECT * FROM 表名 WHERE 字段名 LIKE '%${參數(shù)}%';?
注意:($不能防止sql注入, #{}---> 可以防止sql注入的問(wèn)題)
1.3 程序中拼接
Java 代碼
String searchText = new StringBuilder("%").append(text).append("%").toString();? parameterMap.put("text", searchText);
Mapper 映射文件
SELECT * FROM 表名 WHERE 字段名 LIKE #{參數(shù)};
第二塊:MyBatis 實(shí)現(xiàn)特殊字符處理之<![CDATA[ ]]>
2.1 <![CDATA[ ]]> 簡(jiǎn)介
它的全稱(chēng)為character data,以"<![CDATA[ "開(kāi)始,以" ]]>" 結(jié)束,在兩者之間嵌入不想被解析程序解析的原始數(shù)據(jù),解析器不對(duì)CDATA區(qū)中的內(nèi)容進(jìn)行解析,而是將這些數(shù)據(jù)原封不動(dòng)地交給下游程序處理。
2.2 MyBatis 自動(dòng)轉(zhuǎn)義特殊字符表
特殊字符 | 替代符號(hào) |
& | & |
< | < |
> | > |
" | " |
' | ' |
2.3 <![CDATA[ ]]> 特殊字符
xml 中表示: <= 小于等于、 >= 大于等于 需加 這樣的標(biāo)記: <![CDATA[ ]]> xml中有&的符號(hào),需要
- <![CDATA[&]]>這樣表示&
- <= 小于等于 :<![CDATA[ <= ]]>
- >= 大于等于:<![CDATA[ >= ]]>
第三塊:模糊查詢(xún)包含特殊字符
解決辦法:使用 ${...} + <![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模糊查詢(xún)時(shí)對(duì)特殊字符"%"和"_"的處理
問(wèn)題
輸入"%“或”_",查詢(xún)結(jié)果為全部數(shù)據(jù),且無(wú)法查詢(xún)到帶有"%"或者下劃線(xiàn) 的數(shù)據(jù)。
解決
對(duì)特殊字符轉(zhuǎn)義
例如查詢(xú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的模糊查詢(xún)時(shí)特殊字符轉(zhuǎn)義 ? ? ?*/ ? ? public static String escapeChar(String before){ ? ? ? ? if(StringUtils.isNotBlank(before)){ ? ? ? ? ? ? before = before.replaceAll("_", "/_"); ? ? ? ? ? ? before = before.replaceAll("%", "/%"); ? ? ? ? } ? ? ? ? return before.trim() ; ? ? } }
mapper中模糊查詢(xún)語(yǔ)句
name like CONCAT('%',#{name},'%') ESCAPE '/'
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Mybatis實(shí)現(xiàn)動(dòng)態(tài)SQL編寫(xiě)的示例詳解
- Mybatis多表查詢(xún)與動(dòng)態(tài)SQL特性詳解
- MyBatis中的SQL映射文件配置結(jié)果映射的操作指南
- 關(guān)于MyBatis結(jié)果映射的實(shí)例總結(jié)
- MyBatis-plus中的模糊查詢(xún)解讀
- 關(guān)于MyBatis模糊查詢(xún)的幾種實(shí)現(xiàn)方式
- mybatis/mybatis-plus模糊查詢(xún)語(yǔ)句特殊字符轉(zhuǎn)義攔截器的實(shí)現(xiàn)
- MyBatis動(dòng)態(tài)SQL、模糊查詢(xún)與結(jié)果映射操作過(guò)程
相關(guān)文章
Spring boot通過(guò)AOP防止API重復(fù)請(qǐng)求代碼實(shí)例
這篇文章主要介紹了Spring boot通過(guò)AOP防止API重復(fù)請(qǐng)求代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body實(shí)現(xiàn)
本文主要介紹了SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01IDEA設(shè)置maven修改settings.xml配置文件無(wú)法加載倉(cāng)庫(kù)的解決方案
這篇文章主要介紹了IDEA設(shè)置maven修改settings.xml配置文件無(wú)法加載倉(cāng)庫(kù)的解決方案,幫助大家更好的利用IDEA進(jìn)行JAVA的開(kāi)發(fā)學(xué)習(xí),感興趣的朋友可以了解下2021-01-01Hibernate Validation自定義注解校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了Hibernate Validation自定義注解校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Java實(shí)現(xiàn)字符數(shù)組全排列的方法
這篇文章主要介紹了Java實(shí)現(xiàn)字符數(shù)組全排列的方法,涉及Java針對(duì)字符數(shù)組的遍歷及排序算法的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-12-12java中mybatis和hibernate的用法總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于java中mybatis和hibernate的用法總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-01-01詳解Spring框架注解掃描開(kāi)啟之配置細(xì)節(jié)
本篇文章主要介紹了詳解Spring框架注解掃描開(kāi)啟之配置細(xì)節(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08Java如何在 Word 中設(shè)置上、下標(biāo)
這篇文章主要介紹了Java如何在 Word 中設(shè)置上、下標(biāo),幫助大家更好的利用Java處理文檔,感興趣的朋友可以了解下2020-09-09