最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis-Plus中and()和or()的使用與原理詳解

 更新時(shí)間:2022年09月07日 15:12:34   作者:勤奮的Mr.Li  
最近發(fā)現(xiàn)MyBatisPlus還是挺好用的,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus中and()和or()的使用與原理的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一. 簡單無優(yōu)先級(jí)連接(即無括號(hào)的sql語句)

簡單來說,兩個(gè)子條件間默認(rèn)and與連接,若兩個(gè)之間顯式寫出or()則or或連接.

1. 與連接 and()

當(dāng)需要簡單的將兩個(gè)條件與連接,則最直接的寫法為:

QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().
eq("attr_id",key).
eq("catelog_id",catelogId);

當(dāng)然也可以顯式地寫出and()如下,但沒必要:

QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().
eq("attr_id",key);
 
queryWrapper.and(qr -> qr.eq("catelog_id", catelogId));

2. 或連接 or()

當(dāng)需要簡單的將兩個(gè)條件或連接,則最直接的寫法為:

QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().
eq("attr_id",key).
or().
eq("catelog_id",catelogId);

當(dāng)然也可以如下,但不那么直觀:

QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().
eq("attr_id",key);
 
queryWrapper.or(qr -> qr.eq("catelog_id", catelogId));

二. 復(fù)雜有優(yōu)先級(jí)的的連接

上面有2個(gè)不推薦的做法,是因?yàn)閟ql語句為A or B , A and B這種簡單連接.當(dāng)涉及到諸如 A and ( B or C) and D 這類的復(fù)雜有優(yōu)先級(jí)的的連接,直接拼接會(huì)導(dǎo)致成為 A and B or C and D.所以這時(shí)候需要需要or(Consumer consumer),and(Consumer consumer)這兩個(gè)方法.示例如下:

        QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().eq("attr_type", "base".equalsIgnoreCase(type) ? 1 : 0);
        queryWrapper.and(qr -> 
                qr.eq("attr_id", key).
                   or().
                   like("attr_name", key)
        );
        queryWrapper.and(qr -> qr.eq("catelog_id", catelogId));

生成的sql語句如下:

select ...
WHERE (attr_type = ? AND ( (attr_id = ? OR attr_name LIKE ?) ) AND ( (catelog_id = ?) ))
...;

由此還可見or(Consumer consumer),and(Consumer consumer)這兩個(gè)方法參數(shù)為Consumer時(shí),會(huì)在連接處生成2對(duì)括號(hào),以此提高優(yōu)先級(jí).

補(bǔ)充:MybatisPlus中and和or的組合使用

案例1:where   A=? and B=? 

        //SELECT id,name,age,sex FROM student WHERE (name = ? AND age = ?)
        List<Student> list = studentService.lambdaQuery().eq(Student::getName, "1").eq(Student::getAge, 1).list();     

案例2:where A=? or B=? 

        //SELECT id,name,age,sex FROM student WHERE (name = ? OR age = ?)
        List<Student> list = studentService.lambdaQuery().eq(Student::getName, "1").or().eq(Student::getAge, 12).list();

案例3:where A=? or(C=? and D=?) 

        //SELECT id,name,age,sex FROM student WHERE (name = ? OR (name = ? AND age = ?)) 
      List<Student> list =
          studentService
              .lambdaQuery()
              .eq(Student::getName, "1")
              .or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
              .list();      

案例4:where (A=?andB=?)or(C=?andD=?) 

    // SELECT id,name,age,sex FROM student WHERE ((name = ? AND age = ?) OR (name = ? AND age = ?)) 
    List<Student> list =
        studentService
            .lambdaQuery()
            .and(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
            .or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
            .list();  

案例5:whert  A =? or (B=? and ( C=? or D=?)) 

    // SELECT * FROM student WHERE ((name <> 1) OR (name = 1 AND (age IS NULL OR age >= 11)))
    List<Student> list =
        studentService
            .lambdaQuery()
            .and(wp -> wp.ne(Student::getName, "1"))
            .or(
                wp ->
                    wp.eq(Student::getName, "1")
                        .and(wpp -> wpp.isNull(Student::getAge).or().ge(Student::getAge, 11)))
            .list();

總結(jié)

到此這篇關(guān)于Mybatis-Plus中and()和or()使用與原理的文章就介紹到這了,更多相關(guān)Mybatis-Plus中and()和or()使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis注解開發(fā) 一對(duì)多嵌套查詢方式

    mybatis注解開發(fā) 一對(duì)多嵌套查詢方式

    這篇文章主要介紹了mybatis注解開發(fā) 一對(duì)多嵌套查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-03-03
  • 100-200之間所有素?cái)?shù)求和程序代碼(二個(gè)版本)

    100-200之間所有素?cái)?shù)求和程序代碼(二個(gè)版本)

    寫一個(gè)求100-200之間素?cái)?shù),并求和的程序,大家參考使用吧
    2013-11-11
  • 區(qū)塊鏈java代碼實(shí)現(xiàn)

    區(qū)塊鏈java代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了區(qū)塊鏈java代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • SpringBoot配置文件application.properties的使用

    SpringBoot配置文件application.properties的使用

    這篇文章主要介紹了SpringBoot配置文件application.properties的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java?retainAll()方法的超詳細(xì)講解

    Java?retainAll()方法的超詳細(xì)講解

    這篇文章主要介紹了Java?retainAll()方法的相關(guān)資料,retainAll()是Java集合接口中的一個(gè)方法,用于保留集合中與指定集合交集的元素,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • SpringBoot中使用Redis的完整實(shí)例

    SpringBoot中使用Redis的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于SpringBoot中使用Redis的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲

    java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解SpringBoot和Mybatis配置多數(shù)據(jù)源

    詳解SpringBoot和Mybatis配置多數(shù)據(jù)源

    本篇文章主要介紹了詳解SpringBoot和Mybatis配置多數(shù)據(jù)源,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java如何基于ProcessBuilder類調(diào)用外部程序

    Java如何基于ProcessBuilder類調(diào)用外部程序

    這篇文章主要介紹了Java如何基于ProcessBuilder類調(diào)用外部程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • java使用httpclient 發(fā)送請(qǐng)求的示例

    java使用httpclient 發(fā)送請(qǐng)求的示例

    HttpClient 是Apache Jakarta Common 下的子項(xiàng)目,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議,這篇文章主要介紹了java使用httpclient 發(fā)送請(qǐng)求的示例,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

永丰县| 长治县| 吉林省| 安义县| 桑植县| 宁化县| 清水河县| 台湾省| 宣化县| 东丽区| 新竹市| 会宁县| 江津市| 蚌埠市| 徐水县| 博湖县| 兖州市| 繁昌县| 曲麻莱县| 泸州市| 五常市| 巩留县| 南通市| 贵阳市| 阳高县| 祁阳县| 大名县| 黄梅县| 嘉禾县| 阿瓦提县| 大洼县| 泰州市| 松溪县| 佛山市| 永州市| 丹凤县| 定州市| 山阴县| 新平| 景宁| 呼和浩特市|