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

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

 更新時間:2021年09月28日 09:46:37   作者:人無名,則可專心練劍  
Mybatis是我們?nèi)粘m椖恐薪?jīng)常使用的框架,在項目中我們一般會使用like查詢作為模糊匹配字符進行搜索匹配,下面的Mapper.xml是我們使用like在項目中進行模糊匹配的常用方式,感興趣的朋友跟隨小編一起看看吧

1.問題背景

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í)行解析器才會把它當(dāng)成是單個字符進行匹配,否則則會按照匹配兩個''字符進行模糊匹配,得出全表搜索的錯誤結(jié)果。

2.解決方法

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

使用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("_", "\\\\_");
    }
}

2.2.使用ESCAPE

使用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("_", "/_");
    }
}

2.3.總結(jié)

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

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

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

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

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

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

相關(guān)文章

  • Java8新特性:函數(shù)式編程

    Java8新特性:函數(shù)式編程

    Java8最新引入函數(shù)式編程概念,該項技術(shù)可以大大提升編碼效率,本文會對涉及的對象等進行兩種方法的對比,對新技術(shù)更直白的看到變化,更方便學(xué)習(xí)
    2021-06-06
  • 利用Java設(shè)置Word文本框中的文字旋轉(zhuǎn)方向的實現(xiàn)方法

    利用Java設(shè)置Word文本框中的文字旋轉(zhuǎn)方向的實現(xiàn)方法

    Word文檔中可添加文本框,并設(shè)置文本框為橫向文本排列或是縱向文本排列,或者設(shè)置文本框中的文字旋轉(zhuǎn)方向等.通過Java程序代碼,也可以實現(xiàn)以上文本框的操作.下面以Java代碼示例展示具體的實現(xiàn)步驟.另外,可參考C#及VB.NET代碼的實現(xiàn)方法,需要的朋友可以參考下
    2021-06-06
  • IDEA生成項目maven-tree依賴目錄樹結(jié)構(gòu)方式

    IDEA生成項目maven-tree依賴目錄樹結(jié)構(gòu)方式

    這篇文章主要介紹了IDEA生成項目maven-tree依賴目錄樹結(jié)構(gòu)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java自帶定時任務(wù)ScheduledThreadPoolExecutor實現(xiàn)定時器和延時加載功能

    Java自帶定時任務(wù)ScheduledThreadPoolExecutor實現(xiàn)定時器和延時加載功能

    今天小編就為大家分享一篇關(guān)于Java自帶定時任務(wù)ScheduledThreadPoolExecutor實現(xiàn)定時器和延時加載功能,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot整合OpenApi的實踐

    SpringBoot整合OpenApi的實踐

    本文主要介紹了SpringBoot整合OpenApi,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 在Spring Boot中集成RabbitMQ詳細步驟(最新推薦)

    在Spring Boot中集成RabbitMQ詳細步驟(最新推薦)

    本文將介紹如何在Spring Boot項目中集成RabbitMQ,實現(xiàn)生產(chǎn)者和消費者的基本配置,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • 詳解JavaWeb如何實現(xiàn)文件上傳和下載功能

    詳解JavaWeb如何實現(xiàn)文件上傳和下載功能

    這篇文章主要介紹了如何利用JavaWeb實現(xiàn)文件的上傳和下載功能,文中的示例代碼講解詳細,對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • 自定義feignClient的常見坑及解決

    自定義feignClient的常見坑及解決

    這篇文章主要介紹了自定義feignClient的常見坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Hibernate初體驗及簡單錯誤排除代碼詳解

    Hibernate初體驗及簡單錯誤排除代碼詳解

    這篇文章主要介紹了Hibernate初體驗及簡單錯誤排除代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java中使用dom4j解析XML文件的方法教程

    java中使用dom4j解析XML文件的方法教程

    在最近的開發(fā)中用到了dom4j來解析xml文件,所以便有了這篇文章,本文主要給大家介紹了關(guān)于java中使用dom4j解析XML文件的方法教程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09

最新評論