Mybatis学习笔记-09 分页

由于现代数据库查询的数据量很多,我们往往采用分页的办法,这样既可以更好的展示数据,又可以不用因为一次查询太多数据导致响应过慢。Mybatis提供了PageHelper插件用于分页查询。

基础使用

1. 导入依赖

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.10</version>
        </dependency>

2. 在主配置文件中添加插件    使用插件标签<plugin> (注意标签的位置)

(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>

3. 测试分页功能

    @Test
    public void testPage(){
        PageHelper.startPage(1,2);
        List<User> users = mapper.queryUsers();
        for (User user : users) {
            System.out.println(user);
        }
        System.out.println("========================");
        users = mapper.queryUsers();
        for (User user : users) {
            System.out.println(user);
        }
    }

[注]:1. 分页查询通过设置PageHelper.start(查询第几页[页号从1开始],一页几条数据)实现,只针对之后的第一个查询有效。

         2. 其实这款分页插件帮助我们做的就是在SQL后追加LIMIT,底层还是使用原生的SQL实现的。

         3. 分页插件不支持带有排他锁 "for update" 的查询语句。

         4. 分页插件不支持“嵌套查询”,可能得不到正确的结果数量。

进阶操作

Mybatis的分页插件还提供了PageInfo类,它具有很多属性,便于进阶开发。

属性详解:


private int pageNum : 当前页 
private int pageSize : 每页的数量   
private int size : 当前页的数量(因为最后一页可能没填满,如11条记录,每页3条,最后一个只有2条)
private int startRow : 当前页面第一个元素在数据库中的行号  
private int endRow : 当前页面最后一个元素在数据库中的行号 
private int pages : 总页数
private int prePage : 前一页的页号,没有则为0 
private int nextPage : 后一页的页号,没有则为0 
private boolean isFirstPage :  是否为第一页
private boolean isLastPage = false : 是否为最后一页  
private long total : 总记录数
private boolean hasPreviousPage = false : 是否有前一页  
private boolean hasNextPage = false : 是否有下一页
private int navigatePages : 每一页所有的导航页码的数量
private int[] navigatepageNums : 存储所有页号的数组
private int navigateFirstPage : 第一页的页号
private int navigateLastPage : 最后一页的页号
private int total : 总的页数


[注]:其中navigatePages属性可能比较难理解,它指的是下图中的1、2、、、、、、10这些标签页的数量,即每一页展示的导航页的数量。

猜你喜欢

转载自blog.csdn.net/qq_39304630/article/details/112296880