国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 解決MyBatis中模糊搜索使用like匹配帶%字符時(shí)失效問(wèn)題

解決MyBatis中模糊搜索使用like匹配帶%字符時(shí)失效問(wèn)題

2022-01-21 00:47人無(wú)名,則可專心練劍 Java教程

Mybatis是我們?nèi)粘m?xiàng)目中經(jīng)常使用的框架,在項(xiàng)目中我們一般會(huì)使用like查詢作為模糊匹配字符進(jìn)行搜索匹配,下面的Mapper.xml是我們使用like在項(xiàng)目中進(jìn)行模糊匹配的常用方式,感興趣的朋友跟隨小編一起看看吧

1.問(wèn)題背景

Mybatis是我們?nèi)粘m?xiàng)目中經(jīng)常使用的框架,在項(xiàng)目中我們一般會(huì)使用like查詢作為模糊匹配字符進(jìn)行搜索匹配,下面的Mapper.xml是我們使用like在項(xiàng)目中進(jìn)行模糊匹配的常用方式:

<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>

這樣使用模糊查詢?cè)诜猪?yè)搜索中可以解決90%的匹配搜索功能,但是,還是有10%是陰溝翻船的事情。比如現(xiàn)在我要匹配文件名detail中帶有'%'的文件,使用這個(gè)語(yǔ)句就會(huì)造成搜索失效,直接返回表中的limit所有數(shù)據(jù)。

解決MyBatis中模糊搜索使用like匹配帶%字符時(shí)失效問(wèn)題

造成這樣結(jié)果的原因就是由于像'%'或者'_'這樣的字符是通配字符,在模糊匹配的時(shí)候需要進(jìn)行轉(zhuǎn)義執(zhí)行,mysql執(zhí)行解析器才會(huì)把它當(dāng)成是單個(gè)字符進(jìn)行匹配,否則則會(huì)按照匹配兩個(gè)''字符進(jìn)行模糊匹配,得出全表搜索的錯(cuò)誤結(jié)果。

 

2.解決方法

2.1.在入?yún)earchVo上進(jìn)行特殊符號(hào)relpace轉(zhuǎn)換

使用Vo入?yún)⒔邮疹悓?duì)前端傳入的detail字段進(jìn)行判別處理,優(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("_", "\\\\_");
  }
}

2.2.使用ESCAPE

使用ESCAPE:escape簡(jiǎn)單來(lái)說(shuō)就是escape '字符',表示在like中從帶有'字符'之后不再作為通配字符具有特殊含義,escape的理解可以參考另外一篇博客:

MYSQL escape用法,這里就不再做詳細(xì)介紹。

對(duì)應(yīng)的解決方式如下:

①修改sql查詢語(yǔ)句,添加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進(jìn)行通配符設(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("_", "/_");
  }
}

2.3.總結(jié)

以上兩種方式本質(zhì)都是對(duì)查詢的關(guān)鍵字進(jìn)行了處理,第一種方式更直接簡(jiǎn)潔,第二種方式更容易理解。兩種方式我個(gè)人更推薦第一種。

另外還有一種處理方式是在代碼中使用攔截器或者AOP等技術(shù)進(jìn)行統(tǒng)一攔截處理,有興趣的小伙伴可以搜索了解一下。涉及代碼較多,這里就不再一一展開(kāi)。

本博文寫(xiě)作要感謝“阿飛云”提供博文參考:

Mybatis中Like的使用方式以及一些注意點(diǎn)

寫(xiě)的非常不錯(cuò),也在工作中解決了我的一個(gè)Bug單問(wèn)題,可以結(jié)合一起作為參考。

到此這篇關(guān)于MyBatis模糊搜索使用like匹配帶%字符時(shí)失效問(wèn)題的文章就介紹到這了,更多相關(guān)MyBatis like模糊搜索內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/yif0118/archive/2021/09/27/15345931.html

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本中文字幕在线观看 | 日本中文字幕在线播放 | 成人免费一区二区三区视频网站 | 香蕉大人久久国产成人av | 岛国一区 | 国产精品日产欧美久久久久 | 欧美va天堂| 久久久久久久久久亚洲 | 精品国产一区二区在线 | 日韩一区中文字幕 | 精品视频三区 | 亚洲一区二区视频 | 欧美黄视频在线观看 | 黄大片在线观看 | 中文字幕在线视频观看 | 美日韩一区| 亚洲第一视频 | 色之久久综合 | 999精品视频一区二区三区 | 国产成人网 | 亚洲国产精品激情在线观看 | 日韩视频免费在线播放 | www.国产.com| 亚洲午夜免费 | 精品色| 在线观看欧美一区 | 久久国产免费 | 日本不卡在线 | 真实的国产乱xxxx在线 | 成人羞羞网站 | 国产三级黄色毛片 | 国产日韩精品一区 | 一区二区三区四区在线视频 | 精品久久久久久久久久 | 一级做a爰片久久高潮 | 日韩毛片免费看 | 日本久久精品视频 | 久久综合伊人 | 色视频在线免费观看 | 国产在线精品一区 | 综合99 |