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

MybatisPlus分頁(yè)查詢(xún)與多條件查詢(xún)介紹及查詢(xún)過(guò)程中空值問(wèn)題的解決

 更新時(shí)間:2022年10月13日 09:05:11   作者:懶羊羊.java  
mybatisplus是個(gè)很好用的插件,相信小伙伴們都知道,下面這篇文章主要給大家介紹了關(guān)于mybatis-plus實(shí)現(xiàn)分頁(yè)查詢(xún)與多條件查詢(xún)介紹及查詢(xún)過(guò)程中空值問(wèn)題的相關(guān)資料,需要的朋友可以參考下

前言

MP這樣一款強(qiáng)大的持久層框架處理起來(lái)復(fù)雜的SQL來(lái)也是得心應(yīng)手,效率極高,快快與我一同領(lǐng)略Plus的獨(dú)特魅力吧

一.分頁(yè)處理

1.調(diào)用方法傳入?yún)?shù)獲取返回值

創(chuàng)建IPage分頁(yè)對(duì)象,設(shè)置分頁(yè)參數(shù),1為當(dāng)前頁(yè)碼,3為每頁(yè)顯示的記錄數(shù),執(zhí)行分頁(yè)查詢(xún)并獲取其結(jié)果

@SpringBootTest
class Mybatisplus{
    @Autowired
    private UserDao userDao;    
    //分頁(yè)查詢(xún)
    @Test
    void testSelectPage(){      
        IPage<User> page=new Page<>(1,3);
        userDao.selectPage(page,null);
        System.out.println("當(dāng)前頁(yè)碼值:"+page.getCurrent());
        System.out.println("每頁(yè)顯示數(shù):"+page.getSize());
        System.out.println("一共多少頁(yè):"+page.getPages());
        System.out.println("一共多少條數(shù)據(jù):"+page.getTotal());
        System.out.println("數(shù)據(jù):"+page.getRecords());
    }
}

2.設(shè)置分頁(yè)攔截器

將MP提供的分頁(yè)攔截器配置成Spring管理的bean對(duì)象

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1 創(chuàng)建MybatisPlusInterceptor攔截器對(duì)象
        MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
        //2 添加分頁(yè)攔截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpInterceptor;
    }
}

查詢(xún)結(jié)果如下:

MP有多智能,他給我們提供的方法和功能太強(qiáng)大,以至于我們只需傳入兩個(gè)對(duì)象即可自動(dòng)完成分頁(yè)查詢(xún)

二.條件查詢(xún)

2.1通過(guò)QueryWrapper對(duì)象來(lái)執(zhí)行分頁(yè)查詢(xún)

@SpringBootTest
class Mybatisplus{
    @Autowired
    private UserDao userDao;
    @Test
    void testGetAll(){
        QueryWrapper qw = new QueryWrapper();
        qw.lt("age",18);
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
    }
}

注:lt()方法為小于(<) ,對(duì)應(yīng)的SQL為:

SELECT id,name,password,age,tel FROM user WHERE (age < ?)

很容易發(fā)現(xiàn),以字符串形式輸出作為查詢(xún)條件可能會(huì)出現(xiàn)字符串拼寫(xiě)錯(cuò)誤,針對(duì)此種情況,可以進(jìn)行一下小改進(jìn)!

2.2在QueryWrapper對(duì)象的基礎(chǔ)上使用lambda表達(dá)式

為了解決以字符串形式作為輸出而造成拼寫(xiě)錯(cuò)誤的問(wèn)題,通過(guò)lambda來(lái)實(shí)現(xiàn)實(shí)體與屬性對(duì)應(yīng)進(jìn)行查詢(xún),就極大地提高了查詢(xún)的準(zhǔn)確性

@SpringBootTest
class Mybatisplus{
    @Autowired
    private UserDao userDao;
    @Test
    void testGetAll(){
        QueryWrapper<User> qw = new QueryWrapper<User>();
        qw.lambda().lt(User::getAge, 10);//添加條件
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
    }
}

與之對(duì)應(yīng)的SQL語(yǔ)句同樣也是:

SELECT id,name,password,age,tel FROM user WHERE (age < ?)

注:構(gòu)建LambdaQueryWrapper的時(shí)候泛型不能省

當(dāng)不使用泛型時(shí)會(huì)提示默認(rèn)的Object類(lèi)不是函數(shù)接口

而我們的lambda()的底層又需要傳進(jìn)去一個(gè)實(shí)體,傳進(jìn)去Object顯然不能與后面的查詢(xún)條件相聯(lián)系!

此時(shí)我們?cè)俅尉帉?xiě)條件的時(shí)候,就不會(huì)存在寫(xiě)錯(cuò)名稱(chēng)的情況,但是qw后面多了一層lambda()調(diào)用

2.3直接通過(guò)LambdaQueryWrapper對(duì)象

這也是方式二的另一種寫(xiě)法,原理相同都是利用LambdaQueryWrapper

@SpringBootTest
class Mybatisplus{
    @Autowired
    private UserDao userDao;
    @Test
    void testGetAll(){
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        lqw.lt(User::getAge, 10);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
}

三.多條件查詢(xún)

對(duì)于多條件的情景,MP依然可以簡(jiǎn)單化解,并且構(gòu)建多條件的時(shí)候,可以支持鏈?zhǔn)骄幊?/p>

3.1且的情況

場(chǎng)景一:查詢(xún)數(shù)據(jù)庫(kù)表中,年齡在3歲到8歲之間的用戶(hù)信息

@SpringBootTest
class Mybatisplus{
    @Autowired
    private UserDao userDao;
  @Test
    /**
     * 多條件查詢(xún)
     */
    void testGetAll04() {   //方式四  (常用!)
        LambdaQueryWrapper<Users> qw4 = new LambdaQueryWrapper<>();
        qw4.lt(Users::getAge, 8);  //上限
        qw4.gt(Users::getAge, 3);  //下限
//      qw4.lt(Users::getAge, 8).gt(Users::getAge, 3);  鏈?zhǔn)骄幊蹋?
        List<Users> users = userDao.selectList(qw4);
        System.out.println(users);
    }
}

注:gt(),大于(>),最終的SQL語(yǔ)句為

SELECT id,name,password,age,tel FROM user WHERE (age < ? AND age > ?)

也是迅速查出來(lái)了結(jié)果

3.2或的情況

場(chǎng)景二:查詢(xún)數(shù)據(jù)庫(kù)表中,年齡小于3或年齡大于8的數(shù)據(jù)

@SpringBootTest
class Mybatisplus{
    @Autowired
    private UserDao userDao;
    @Test
    void testGetAll(){
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        lqw.lt(User::getAge, 3).or().gt(User::getAge, 8);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
}

這里的or()就相當(dāng)于sql語(yǔ)句中的or關(guān)鍵字,不加默認(rèn)是and,最終的sql語(yǔ)句為:

SELECT id,name,password,age,tel FROM user WHERE (age < ? OR age > ?)

也是順利的查了出來(lái)

四.null判定

以TB為例,我們購(gòu)物時(shí)進(jìn)行條件篩選時(shí),可以選擇單條件,也可以選擇多條件,如上,我的條件就變成price>3000,price<null,這種情況按照以上介紹的查詢(xún)的方式就會(huì)出現(xiàn)問(wèn)題,如圖:

顯然,這種情況在開(kāi)發(fā)過(guò)程中時(shí)不被允許的。所以要求我們針對(duì)null的情況要解決如下問(wèn)題:

用戶(hù)在輸入值的時(shí)候:

1.如果只輸入第一個(gè)框,說(shuō)明要查詢(xún)大于該價(jià)格的商品

2.如果只輸入第二個(gè)框,說(shuō)明要查詢(xún)小于該價(jià)格的商品 ?

3.如果兩個(gè)框都輸入了,說(shuō)明要查詢(xún)價(jià)格在兩個(gè)范圍之間的商品

于是,我們可以

新建一個(gè)模型類(lèi),讓其繼承Brand類(lèi),并在其中添加price2屬性,Brand02 在擁有Brand屬性后同時(shí)添加了price2屬性

@Data
public class Brand {
    private Long id;
    private String name;
    private Double price;
}
@Data
public class Brand02 extends Brand {
    private Integer price2;
}

解決了實(shí)體的問(wèn)題,再來(lái)解決條件的問(wèn)題

@SpringBootTest
class Mybatisplus02{
    @Autowired
    private BrandDao brandDao;
    @Test
    void testGetAll(){
     BrandQuery bq = new BrandQuery();
        LambdaQueryWrapper<Brand> lqw = new LambdaQueryWrapper<Brand>();
        lqw.lt(null!=bq.getPrice2(),User::getPrice, bq.getPrice2());
        lqw.gt(null!=bq.getPrice(),User::getPrice, bq.getPrice());
        List<Brand> brands = brandDao.selectList(lqw);
        System.out.println(brands);
    }
}

解讀:

如果兩個(gè)屬性不為空,則查詢(xún)price,price2區(qū)間范圍內(nèi)

如果有一個(gè)屬性為空,則查詢(xún)不為空的區(qū)間

實(shí)現(xiàn)的核心在于lt()、gt()方法,condition為boolean類(lèi)型上述的null!=bq.getPrice2()與之對(duì)應(yīng),返回true,則添加條件,返回false則不添加條件,條件的生效與否就是靠的這個(gè)設(shè)計(jì)!

最后,也是在null的條件下完成了查詢(xún):

到此這篇關(guān)于MybatisPlus分頁(yè)查詢(xún)與多條件查詢(xún)介紹及查詢(xún)過(guò)程中空值問(wèn)題的解決的文章就介紹到這了,更多相關(guān)MybatisPlus分頁(yè)查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 圖解排序算法之希爾排序Java實(shí)現(xiàn)

    圖解排序算法之希爾排序Java實(shí)現(xiàn)

    希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡(jiǎn)單插入排序經(jīng)過(guò)改進(jìn)之后的一個(gè)更高效的版本,也稱(chēng)為縮小增量排序,同時(shí)該算法是沖破O(n2)的第一批算法之一。本文會(huì)以圖解的方式詳細(xì)介紹希爾排序的基本思想及其代碼實(shí)現(xiàn)
    2021-06-06
  • SpringSecurity自定義資源攔截規(guī)則及登錄界面跳轉(zhuǎn)問(wèn)題

    SpringSecurity自定義資源攔截規(guī)則及登錄界面跳轉(zhuǎn)問(wèn)題

    這篇文章主要介紹了SpringSecurity自定義資源攔截規(guī)則及登錄界面跳轉(zhuǎn)問(wèn)題,我們想要自定義認(rèn)證邏輯,就需要?jiǎng)?chuàng)建一些原來(lái)不存在的bean,這個(gè)時(shí)候就可以使@ConditionalOnMissingBean注解,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • Mybatis-Plus 條件構(gòu)造器示例詳解

    Mybatis-Plus 條件構(gòu)造器示例詳解

    這篇文章主要介紹了Mybatis-Plus 條件構(gòu)造器的相關(guān)資料,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 關(guān)于springboot配置druid數(shù)據(jù)源不生效問(wèn)題(踩坑記)

    關(guān)于springboot配置druid數(shù)據(jù)源不生效問(wèn)題(踩坑記)

    今天日常跟著網(wǎng)課學(xué)習(xí),學(xué)到了整合druid數(shù)據(jù)源,遇到了好幾個(gè)坑,希望這篇文章可以幫助一些和我一樣踩坑的人
    2021-09-09
  • IDEA中SpringBoot項(xiàng)目數(shù)據(jù)庫(kù)連接加密方法

    IDEA中SpringBoot項(xiàng)目數(shù)據(jù)庫(kù)連接加密方法

    這篇文章主要介紹了IDEA中SpringBoot項(xiàng)目數(shù)據(jù)庫(kù)連接加密方法,文章通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • 詳解Java String字符串獲取每一個(gè)字符及常用方法

    詳解Java String字符串獲取每一個(gè)字符及常用方法

    這篇文章主要介紹了詳解Java String字符串獲取每一個(gè)字符及常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • SpringCloud-Gateway網(wǎng)關(guān)的使用實(shí)例教程

    SpringCloud-Gateway網(wǎng)關(guān)的使用實(shí)例教程

    Gateway網(wǎng)關(guān)在微服務(wù)架構(gòu)中扮演了不可或缺的角色,通過(guò)集中化管理、智能路由和強(qiáng)大的過(guò)濾器機(jī)制,為構(gòu)建高效、可擴(kuò)展的微服務(wù)系統(tǒng)提供了有力支持,這篇文章主要介紹了SpringCloud-Gateway網(wǎng)關(guān)的使用,需要的朋友可以參考下
    2024-03-03
  • Spark JDBC操作MySQL方式詳細(xì)講解

    Spark JDBC操作MySQL方式詳細(xì)講解

    這篇文章主要介紹了Spark JDBC操作MySQL方式,Spark SQL可以通過(guò)JDBC從傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中讀寫(xiě)數(shù)據(jù),讀取數(shù)據(jù)后直接生成的是DataFrame,然后再加上借助于Spark SQL豐富的API來(lái)進(jìn)行各種操作
    2023-02-02
  • Springboot實(shí)現(xiàn)頁(yè)面間跳轉(zhuǎn)功能

    Springboot實(shí)現(xiàn)頁(yè)面間跳轉(zhuǎn)功能

    這篇文章主要介紹了Springboot實(shí)現(xiàn)頁(yè)面間跳轉(zhuǎn)功能,本文給大家分享兩種方式,方法一和方法二是不沖突的,但是通常情況下如果用方法二addViewControllers,需要把方法一所寫(xiě)的Controller類(lèi)給注釋掉,需要的朋友可以參考下
    2023-10-10
  • JavaWeb倉(cāng)庫(kù)管理系統(tǒng)詳解

    JavaWeb倉(cāng)庫(kù)管理系統(tǒng)詳解

    這篇文章主要為大家詳細(xì)介紹了JavaWeb倉(cāng)庫(kù)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論