激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - 解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題

解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題

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

Mybatis是我們日常項目中經常使用的框架,在項目中我們一般會使用like查詢作為模糊匹配字符進行搜索匹配,下面的Mapper.xml是我們使用like在項目中進行模糊匹配的常用方式,感興趣的朋友跟隨小編一起看看吧

1.問題背景

Mybatis是我們日常項目中經常使用的框架,在項目中我們一般會使用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%是陰溝翻船的事情。比如現在我要匹配文件名detail中帶有'%'的文件,使用這個語句就會造成搜索失效,直接返回表中的limit所有數據。

解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題

造成這樣結果的原因就是由于像'%'或者'_'這樣的字符是通配字符,在模糊匹配的時候需要進行轉義執行,mysql執行解析器才會把它當成是單個字符進行匹配,否則則會按照匹配兩個''字符進行模糊匹配,得出全表搜索的錯誤結果。

 

2.解決方法

2.1.在入參SearchVo上進行特殊符號relpace轉換

使用Vo入參接收類對前端傳入的detail字段進行判別處理,優先替換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簡單來說就是escape '字符',表示在like中從帶有'字符'之后不再作為通配字符具有特殊含義,escape的理解可以參考另外一篇博客:

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

對應的解決方式如下:

①修改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進行通配符設置:

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.總結

以上兩種方式本質都是對查詢的關鍵字進行了處理,第一種方式更直接簡潔,第二種方式更容易理解。兩種方式我個人更推薦第一種。

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

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

Mybatis中Like的使用方式以及一些注意點

寫的非常不錯,也在工作中解決了我的一個Bug單問題,可以結合一起作為參考。

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

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

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

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

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

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

    Java使用SAX解析xml的示例

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

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

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

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

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

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
714
主站蜘蛛池模板: h色网站免费观看 | 免费视频a | 男女羞羞视频 | 久久久久女人精品毛片 | 久久精片 | 羞羞网站在线观看入口免费 | 国产88久久久国产精品免费二区 | 色污视频在线观看 | 久久久久久亚洲国产精品 | 亚洲片在线 | 午夜爱爱福利 | 精品久久久久久久久久久久久久久久久久久 | 国产人成免费爽爽爽视频 | 久久777国产线看观看精品 | 一级做受毛片免费大片 | 国产精品爱久久久久久久 | 激情五月少妇a | 欧美巨根 | 中文字幕一区在线观看视频 | 欧美亚洲一级 | 国产乱淫a∨片免费观看 | 久久一级 | www.48xx.com| 亚洲四播房 | 亚洲成人精品一区二区 | 国产伦精品一区二区三区 | 日本免费不卡一区二区 | 成人在线视频一区 | 男女羞羞视频在线观看免费 | 黄免费观看视频 | 国产一级二级视频 | 国产91亚洲精品久久久 | 欧美国产免费 | 天堂成人国产精品一区 | 久在线观看 | 久久亚洲精品国产一区 | 成人综合区一区 | 欧美成人久久 | 午夜免费一区 | 性少妇videosexfreexxx片 | 91精品国啪老师啪 |