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

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ì),需要的朋友可以參考下

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

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

1. 與連接 and()

當(dāng)需要簡(jiǎn)單的將兩個(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)需要簡(jiǎn)單的將兩個(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語(yǔ)句為A or B , A and B這種簡(jiǎn)單連接.當(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語(yǔ)句如下:

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)文章

  • java微信企業(yè)號(hào)開發(fā)之通訊錄

    java微信企業(yè)號(hào)開發(fā)之通訊錄

    這篇文章主要為大家詳細(xì)介紹了java微信企業(yè)號(hào)開發(fā)之通訊錄的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-06-06
  • SSH框架網(wǎng)上商城項(xiàng)目第27戰(zhàn)之申請(qǐng)域名空間和項(xiàng)目部署及發(fā)布

    SSH框架網(wǎng)上商城項(xiàng)目第27戰(zhàn)之申請(qǐng)域名空間和項(xiàng)目部署及發(fā)布

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第26戰(zhàn)之申請(qǐng)域名空間和項(xiàng)目部署及發(fā)布,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Spring Boot 配置 Quartz 定時(shí)任務(wù)的方法

    Spring Boot 配置 Quartz 定時(shí)任務(wù)的方法

    這篇文章主要介紹了Spring Boot 配置 Quartz 定時(shí)任務(wù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 解讀Mapper與Mapper.xml文件之間匹配的問題

    解讀Mapper與Mapper.xml文件之間匹配的問題

    這篇文章主要介紹了解讀Mapper與Mapper.xml文件之間匹配的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • java使用rmi傳輸大文件示例分享

    java使用rmi傳輸大文件示例分享

    由于在rmi中無法傳輸文件流,可以先用FileInputStream將文件讀到一個(gè)Byte數(shù)組中,然后把這個(gè)Byte數(shù)組作為參數(shù)傳進(jìn)RMI的方法中,然后在服務(wù)器端將Byte數(shù)組還原為outputStream,這樣就能通過RMI 來傳輸文件了,下面我們來看實(shí)例
    2014-01-01
  • 詳談@Cacheable不起作用的原因:bean未序列化問題

    詳談@Cacheable不起作用的原因:bean未序列化問題

    這篇文章主要介紹了@Cacheable不起作用的原因:bean未序列化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中空指針異常該如何避免詳解

    Java中空指針異常該如何避免詳解

    空指針(Null Pointer Exception,NPE)是Java中最常見不過的異常了,其原因雖然顯而易見,但是開發(fā)人員往往會(huì)忽略,或未能及時(shí)采取措施,下面這篇文章主要給大家介紹了關(guān)于Java中空指針異常該如何避免的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢

    SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢

    這篇文章主要為大家詳細(xì)介紹了SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 深入解析Java中的Classloader的運(yùn)行機(jī)制

    深入解析Java中的Classloader的運(yùn)行機(jī)制

    這篇文章主要介紹了Java中的Classloader的運(yùn)行機(jī)制,包括從JVM方面講解類加載器的委托機(jī)制等,需要的朋友可以參考下
    2015-11-11
  • Java編寫簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過程

    Java編寫簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過程

    這篇文章主要給大家介紹了關(guān)于Java編寫簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論