【Mybatis-Plus學習筆記(三)】分頁查詢


本系列博客其他文章請點擊下方鏈接查看
【Mybatis-Plus學習筆記】目錄

Mybatis分頁

Mybatis的RowBounds就可以實現分頁,但是這是一種內存分頁,他的原理是把符合邏輯的內存全部查出,然后展示需要的數據。如果數據量小的時候,完全可以使用,但是當數據量大的時候,就是對內存的一種浪費。

MP分頁插件

MP分頁插件可以實現物理分頁,不僅更方便,而且消耗的內存資源更少。

如果需要新建一個配置類,如下:

@Configuration
public class MybatisConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

之后就可以使用selectPage方法,傳入Page和QueryWrapper進行查詢。例子如下:

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //實例化的兩個參數分別是當前頁和每頁數量
        Page<User> page = new Page<>(1, 2);
        IPage<User> ipage = userMapper.selectPage(page, queryWrapper);
        //頁數
        System.out.println(ipage.getPages());
        //總數
        System.out.println(ipage.getTotal());
        //獲得查詢的記錄
        List<User> records = ipage.getRecords();
        records.forEach(m-> System.out.println(m));

相當於

''DEBUG==>  Preparing: SELECT id,name,age,email,manager_id,create_time FROM user LIMIT ?,? 
''DEBUG==> Parameters: 0(Long), 2(Long)

還有一種分頁查詢,selectMapsPage(),與上述方法不同的是返回值是一個Map的集合,通過key-value的形式存儲值。如何抉擇取決於你的需求。

實際上,如果你使用Page,MybatisPlus會默認使用SELECT COUNT(1) FROM user 語句來查找總數量,當你不需要總數量的時候,可以在構造page的時候多加一個Boolean參數,true為查找總數,false相反。如下

        Page<User> page = new Page<>(1, 2,false);

多表分頁查詢

如果是多表連接查詢,上述兩種方法,均不可行。但是如果你仍然不想在Sql語句中添加Limit,可以使用Xml文件結合MP分頁插件來完成。

首先,聲明一個方法,這個方法需要兩個參數Page和Wrapper。

 IPage<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER) Wrapper<User> wrapper);

編寫XML

    <select id="selectUserPage" resultType="com.fang.entity.User">
        select *
        from user ${ew.customSqlSegment};
        # 可以添加你想要的連表查詢
    </select>

最后,把selectPage換成你自定義的selectUserPage即可。

但是多表查詢還是建議自己寫SQL,因為大家要知道無論是Mybatis還是MP,他們都只是一個工具,讓我們的代碼書寫起來更加方便,更加優雅。而真正的SQL語句才是本質,如果盲目的追求工具的使用,就有些本末倒置了。所以在這些工具還是不夠智能的情況下,建議多表查詢的時候還是使用原生SQL比較好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM