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

MybatisPlus之likeRight的用法

 更新時(shí)間:2022年06月27日 17:19:30   作者:java-cp  
這篇文章主要介紹了MybatisPlus之likeRight的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

關(guān)于likeRight的用法

在使用Mybatis-plus的時(shí)候,使用like方法發(fā)現(xiàn)匹配的方法和自己想的相反,特此記錄下:

使用場景:

我想要查詢分類的某一層級下的訂單,如下圖,我想查詢所有“男裝”訂單

那么,如果是寫SQL查詢就是這樣

select xx,xx from order_info where category_id like '10,20%';

可是,項(xiàng)目如果使用的是Mybatis-plus,那么我們該怎么寫呢?

最開始我想的是,likeLeft就是左匹配嘛,就按照下面這么寫:

this.list(Wrappers.<OrderInfo>lambdaQuery().likeLeft(OrderInfo::getCategoryId,orderQueryReq.getCategoryId()).eq(OrderInfo::getStatus,99));

哦豁,沒查到數(shù)據(jù)。然后就換成likeRight之后,bingo 數(shù)據(jù)出來了:

然后,我就默默的去看了下源碼(從上到下,層層遞進(jìn),直到最后我們找到了轉(zhuǎn)換SQL的地方,對!就是那個(gè)SqlUtils):

    default Children likeRight(R column, Object val) {
        return this.likeRight(true, column, val);
    }
 
    Children likeRight(boolean condition, R column, Object val);
 
    public Children likeRight(boolean condition, R column, Object val) {
        this.getWrapper().likeRight(condition, column, val);
        return this.typedThis;
    }
 
    public Children likeRight(boolean condition, R column, Object val) {
        return this.likeValue(condition, column, val, SqlLike.RIGHT);
    }
 
    protected Children likeValue(boolean condition, R column, Object val, SqlLike sqlLike) {
        return this.doIt(condition, () -> {
            return this.columnToString(column);
        }, SqlKeyword.LIKE, () -> {
            return this.formatSql("{0}", SqlUtils.concatLike(val, sqlLike));
        });
    }
 
    public static String concatLike(Object str, SqlLike type) {
        switch (type) {
            case LEFT:
                return "%" + str;
            case RIGHT:
                return str + "%";
            default:
                return "%" + str + "%";
        }
    }

原來,它的likeLeft就是‘%’這個(gè)玩意兒加在左側(cè),likeRight就是加在右側(cè),默認(rèn)就是兩邊都加,也就是like!??!

使用like與likeright方法查詢信息的踩坑

先說結(jié)論,like 和 likeRight的區(qū)別就是

  • like:填入query的參數(shù)兩端加上通配符,會進(jìn)行左右兩端進(jìn)行l(wèi)ike匹配
  • likeRight:只給填入?yún)?shù)的右端加入通配符進(jìn)行匹配。

所以使用的時(shí)候要搞清楚自己的需求,盲目使用like查詢會造成隱患。

案例

想要抽取 一串?dāng)?shù)字第7和8位組成是03的數(shù)據(jù)。

例子

2022010101
2022010203
2022010302
2022020102
2022020204
2022020301

結(jié)果應(yīng)該是第3個(gè)和第6個(gè)。

然后我的like語句是

like("number", "______" + 03 + "%") //下劃線_ 代表占位符,表示這個(gè)位置的數(shù)字隨意,但是一個(gè)占位符表示只能有一個(gè)字符,意思表示為:前面6位數(shù)字隨意。但第7,8位必須要03.

然而結(jié)果是第2,3,6個(gè),這個(gè)結(jié)果導(dǎo)致我一系列操作直接全部迷惑操作,把數(shù)據(jù)全大變樣。

最后知道原因,原來mybatisplus的like方法,會在執(zhí)行sql的時(shí)候給參數(shù)前后都加上%,這就導(dǎo)致我的6個(gè)下劃線失效, 所以數(shù)據(jù)混亂。

然后我換成likeRight就結(jié)果問題了,在找bug的時(shí)候,我從前端找到后端,從頁面找到請求,再檢查有沒有寫錯(cuò),最后發(fā)現(xiàn),數(shù)據(jù)庫這里出錯(cuò)了,費(fèi)了好大勁,太難了。

以后用like查詢的時(shí)候可要用對了,還是沒有系統(tǒng)的學(xué)習(xí)mybatisplus,基礎(chǔ)不好所導(dǎo)致的問題。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中常見的5種WEB服務(wù)器介紹

    Java中常見的5種WEB服務(wù)器介紹

    這篇文章主要介紹了Java中常見的5種WEB服務(wù)器介紹,它們分別是Tomcat、Resin、JBoss、WebSphere、WebLogic,需要的朋友可以參考下
    2014-07-07
  • IDEA切換JDK版本詳細(xì)教程(超管用)

    IDEA切換JDK版本詳細(xì)教程(超管用)

    在我們項(xiàng)目開發(fā)的過程中可能會遇到JDK版本過高或者過低導(dǎo)致一些程序無法啟動(dòng),不兼容的問題,所以我們需要切換JDK的版本號,這篇文章主要給大家介紹了關(guān)于IDEA切換JDK版本的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • 基于Java8實(shí)現(xiàn)提高Excel讀寫效率

    基于Java8實(shí)現(xiàn)提高Excel讀寫效率

    這篇文章主要介紹了基于Java8實(shí)現(xiàn)提高Excel讀寫效率,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • maven多模塊工程打包部署的方法步驟

    maven多模塊工程打包部署的方法步驟

    本篇文章主要介紹了maven多模塊工程打包部署的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理(總結(jié))

    Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理(總結(jié))

    這篇文章主要介紹了Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • SpringBoot自定義注解及AOP的開發(fā)和使用詳解

    SpringBoot自定義注解及AOP的開發(fā)和使用詳解

    在公司項(xiàng)目中,如果需要做一些公共的功能,如日志等,最好的方式是使用自定義注解,自定義注解可以實(shí)現(xiàn)我們對想要添加日志的方法上添加,這篇文章基于日志功能來講講自定義注解應(yīng)該如何開發(fā)和使用,需要的朋友可以參考下
    2023-08-08
  • 解決springboot mapper注入報(bào)紅問題

    解決springboot mapper注入報(bào)紅問題

    這篇文章主要介紹了解決springboot mapper注入報(bào)紅問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解JDBC的概念及獲取數(shù)據(jù)庫連接的5種方式

    詳解JDBC的概念及獲取數(shù)據(jù)庫連接的5種方式

    Java?DataBase?Connectivity是將Java與SQL結(jié)合且獨(dú)立于特定的數(shù)據(jù)庫系統(tǒng)的應(yīng)用程序編程接口,一種可用于執(zhí)行SQL語句的JavaAPI。本文主要介紹了JDBC的概念及獲取數(shù)據(jù)庫連接的5種方式,需要的可以參考一下
    2022-09-09
  • java讀取resources文件詳解及實(shí)現(xiàn)代碼

    java讀取resources文件詳解及實(shí)現(xiàn)代碼

    這篇文章主要介紹了java讀取resources文件詳解及實(shí)現(xiàn)代碼的相關(guān)資料,在開發(fā)項(xiàng)目的時(shí)候經(jīng)常會遇到讀取文件夾里面的內(nèi)容,需要的朋友可以參考下
    2017-07-07
  • sqlserver的jdbc配置方法

    sqlserver的jdbc配置方法

    這篇文章主要介紹了sqlserver的jdbc配置方法,需要的朋友可以參考下
    2014-04-04

最新評論