您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題”吧!
1.問題背景
2.解決方法
2.1.在入?yún)earchVo上進行特殊符號relpace轉(zhuǎn)換
2.2.使用ESCAPE
2.3.總結(jié)
Mybatis是我們?nèi)粘m椖恐薪?jīng)常使用的框架,在項目中我們一般會使用like查詢作為模糊匹配字符進行搜索匹配,下面的Mapper.xml是我們使用like在項目中進行模糊匹配的常用方式:
<sql id="searchCondition"> <trim prefix="where" prefixOverrides="and|or"> <if test="paramVo.detail != null and paramVo.detail != '' "> and idwl.detail like concat('%', #{paramVo.detail, jdbcType=VARCHAR}, '%') </if> </trim> </sql>
這樣使用模糊查詢在分頁搜索中可以解決90%的匹配搜索功能,但是,還是有10%是陰溝翻船的事情。比如現(xiàn)在我要匹配文件名detail中帶有'%'的文件,使用這個語句就會造成搜索失效,直接返回表中的limit所有數(shù)據(jù)。
造成這樣結(jié)果的原因就是由于像'%'或者'_'這樣的字符是通配字符,在模糊匹配的時候需要進行轉(zhuǎn)義執(zhí)行,mysql執(zhí)行解析器才會把它當成是單個字符進行匹配,否則則會按照匹配兩個''字符進行模糊匹配,得出全表搜索的錯誤結(jié)果。
使用Vo入?yún)⒔邮疹悓η岸藗魅氲膁etail字段進行判別處理,優(yōu)先替換replace特殊字符:
public class SerachParamVO { private String productVersion; private String detail; private Integer releaseType; private String createUser; private String createUserAccount; private Date createTime; private String description; public void setDetail(String detail) { this.detail = detail.replaceAll("%", "\\\\%") .replaceAll("_", "\\\\_"); } }
使用ESCAPE:escape簡單來說就是escape '字符',表示在like中從帶有'字符'之后不再作為通配字符具有特殊含義,escape的理解可以參考另外一篇博客:
MYSQL escape用法,這里就不再做詳細介紹。
對應(yīng)的解決方式如下:
①修改sql查詢語句,添加escape:
<sql id="searchCondition"> <trim prefix="where" prefixOverrides="and|or"> <if test="paramVo.detail != null and paramVo.detail != '' "> and idwl.detail like concat('%', #{paramVo.detail, jdbcType=VARCHAR}, '%') escape '/' </if> </trim> </sql>
②傳入SearchVo進行通配符設(shè)置:
public class SerachParamVO { private String productVersion; private String detail; private Integer releaseType; private String createUser; private String createUserAccount; private Date createTime; private String description; public void setDetail(String detail) { this.detail = detail.replaceAll("%", "/%") .replaceAll("_", "/_"); } }
感謝各位的閱讀,以上就是“如何解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對如何解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。