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

MybatisPlus分頁查詢與多條件查詢介紹及查詢過程中空值問題的解決

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

前言

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

一.分頁處理

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

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

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

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

將MP提供的分頁攔截器配置成Spring管理的bean對象

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

查詢結(jié)果如下:

MP有多智能,他給我們提供的方法和功能太強大,以至于我們只需傳入兩個對象即可自動完成分頁查詢

二.條件查詢

2.1通過QueryWrapper對象來執(zhí)行分頁查詢

@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()方法為小于(<) ,對應的SQL為:

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

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

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

為了解決以字符串形式作為輸出而造成拼寫錯誤的問題,通過lambda來實現(xià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);
    }
}

與之對應的SQL語句同樣也是:

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

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

當不使用泛型時會提示默認的Object類不是函數(shù)接口

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

此時我們再次編寫條件的時候,就不會存在寫錯名稱的情況,但是qw后面多了一層lambda()調(diào)用

2.3直接通過LambdaQueryWrapper對象

這也是方式二的另一種寫法,原理相同都是利用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);
    }
}

三.多條件查詢

對于多條件的情景,MP依然可以簡單化解,并且構(gòu)建多條件的時候,可以支持鏈式編程

3.1且的情況

場景一:查詢數(shù)據(jù)庫表中,年齡在3歲到8歲之間的用戶信息

@SpringBootTest
class Mybatisplus{
    @Autowired
    private UserDao userDao;
  @Test
    /**
     * 多條件查詢
     */
    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);  鏈式編程!
        List<Users> users = userDao.selectList(qw4);
        System.out.println(users);
    }
}

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

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

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

3.2或的情況

場景二:查詢數(shù)據(jù)庫表中,年齡小于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()就相當于sql語句中的or關(guān)鍵字,不加默認是and,最終的sql語句為:

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

也是順利的查了出來

四.null判定

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

顯然,這種情況在開發(fā)過程中時不被允許的。所以要求我們針對null的情況要解決如下問題:

用戶在輸入值的時候:

1.如果只輸入第一個框,說明要查詢大于該價格的商品

2.如果只輸入第二個框,說明要查詢小于該價格的商品 ?

3.如果兩個框都輸入了,說明要查詢價格在兩個范圍之間的商品

于是,我們可以

新建一個模型類,讓其繼承Brand類,并在其中添加price2屬性,Brand02 在擁有Brand屬性后同時添加了price2屬性

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

解決了實體的問題,再來解決條件的問題

@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);
    }
}

解讀:

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

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

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

最后,也是在null的條件下完成了查詢:

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

相關(guān)文章

  • Spring事務管理只對出現(xiàn)運行期異常進行回滾

    Spring事務管理只對出現(xiàn)運行期異常進行回滾

    Spring的事務管理默認只對出現(xiàn)運行期異常(java.lang.RuntimeException及其子類)進行回滾,需要了解更多Spring事務方面的知識,可詳看本文
    2012-11-11
  • SpringBoot使用SOFA-Lookout監(jiān)控的方法

    SpringBoot使用SOFA-Lookout監(jiān)控的方法

    本文介紹SpringBoot使用螞蟻金服SOFA-Lookout配合Prometheus進行監(jiān)控,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Android Home鍵監(jiān)聽的實現(xiàn)代碼

    Android Home鍵監(jiān)聽的實現(xiàn)代碼

    這篇文章主要介紹了Android Home 鍵監(jiān)聽的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 基于Maven pom文件使用分析

    基于Maven pom文件使用分析

    本文詳細介紹了Maven項目的核心配置文件pom.xml的結(jié)構(gòu)和各個元素的用途,包括項目基礎(chǔ)信息、依賴管理、倉庫配置、構(gòu)建配置、版本控制、分發(fā)和報告配置等,幫助讀者全面了解Maven項目的構(gòu)建和管理過程
    2024-12-12
  • 如何用注解的方式實現(xiàn)Mybatis插入數(shù)據(jù)時返回自增的主鍵Id

    如何用注解的方式實現(xiàn)Mybatis插入數(shù)據(jù)時返回自增的主鍵Id

    這篇文章主要介紹了如何用注解的方式實現(xiàn)Mybatis插入數(shù)據(jù)時返回自增的主鍵Id,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Spring?Boot統(tǒng)一接口返回及全局異常處理

    Spring?Boot統(tǒng)一接口返回及全局異常處理

    這篇文章主要介紹了Spring?Boot統(tǒng)一接口返回及全局異常處理,文章圍繞主題展開相關(guān)資料,具有一定的參考價值需要的小伙伴可以參考一下
    2022-04-04
  • RabbitMQ中的死信隊列(Dead Letter Exchanges)詳解

    RabbitMQ中的死信隊列(Dead Letter Exchanges)詳解

    這篇文章主要介紹了RabbitMQ中的死信隊列(Dead Letter Exchanges)詳解,當RabbitMQ出現(xiàn)死信,可能會導致業(yè)務邏輯錯誤,比如下訂單后修改庫存操作,在下單后因為某種原因,發(fā)送的消息未被簽收,這時庫存數(shù)據(jù)會出現(xiàn)不一致,需要的朋友可以參考下
    2023-12-12
  • Spring-boot原理及spring-boot-starter實例和代碼

    Spring-boot原理及spring-boot-starter實例和代碼

    spring-boot的starter是一個通過maven完成自包含并通過annotation配置使得可被spring上下文發(fā)現(xiàn)并實例化的一個可插拔的組件或服務。這篇文章主要介紹了Spring-boot原理及spring-boot-starter實例和代碼 ,需要的朋友可以參考下
    2019-06-06
  • SpringBoot之Banner的使用示例

    SpringBoot之Banner的使用示例

    本篇文章主要介紹了SpringBoot之Banner的使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • IDEA熱部署配置詳細教程

    IDEA熱部署配置詳細教程

    這篇文章主要介紹了IDEA熱部署配置詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論

瓦房店市| 望谟县| 仙桃市| 浦江县| 新闻| 昂仁县| 海盐县| 庄河市| 江山市| 昂仁县| 西丰县| 长垣县| 铁力市| 普兰县| 容城县| 大邑县| 和龙市| 九台市| 泉州市| 蒙自县| 吉林省| 南投市| 宜黄县| 兰州市| 邯郸县| 蚌埠市| 牟定县| 揭东县| 阜城县| 昌黎县| 肇州县| 沙河市| 盐边县| 瓦房店市| 遵义市| 文山县| 珲春市| 周至县| 广州市| 信宜市| 泰来县|