欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis解決模糊查詢(xún)包含特殊字符問(wèn)題

 更新時(shí)間:2023年02月07日 16:33:41   作者:在奮斗的大道  
這篇文章主要介紹了MyBatis解決模糊查詢(xún)包含特殊字符問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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)
&&amp;
<&lt;
>&gt;
"&quot;
'&apos;

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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論