Mybatis的PageHelper分页插件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38409944/article/details/82556460

前言:

之前我们手撕分页的时候,那代码是真的枯燥。很容易就因为遗漏了一些细节就爆炸,现在好了,又有一个PageHelper分页插件直接给我们省略了其中的步骤,可以直接生成分页。
PageHelper分页插件:是Mybatis的一个重要插件。

使用方法和注意事项,文档已经写的很详细了,我就直接贴出来了。

重要插件:PageHelper分页插件
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md
如何使用:
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
使用提示:
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/Important.md

需要导入包:

jsqlparser.jar
pagehelper.jar

在 MyBatis 配置 xml 中配置拦截器插件:

<!-- 
    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
    properties?, settings?, 
    typeAliases?, typeHandlers?, 
    objectFactory?,objectWrapperFactory?, 
    plugins?, 
    environments?, databaseIdProvider?, mappers?
-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置参数,现在没用 -->
        <property name="param1" value="value1"/>
    </plugin>
</plugins>

test:这里使用的是逆向工程生成的方法
第一种 未包装的方法

@Test
    void test1() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {

            TeachersMapper teachersMapper = sqlSession.getMapper(TeachersMapper.class);
            TeachersExample teachersExample = new TeachersExample();
            Criteria criteria = teachersExample.createCriteria();
            criteria.andIdIsNotNull();
            //一定要放在查询的前面  不然无效
            Page<Object> page = PageHelper.startPage(1, 5);
            List<Teachers> teachers = teachersMapper.selectByExample(teachersExample);
            System.out.println("当前页数:"+page.getPageNum());
            System.out.println("总页数:"+page.getPages());
            System.out.println("总的数据量:"+page.getTotal());
            System.out.println("每页的数据量:"+page.getPageSize());
            for(Teachers one:teachers) {
                System.out.println(one);
            }

        }finally {
            sqlSession.close();
        }
    }

第二种PageInfo包装的方法 更方便:

    @Test
    void test1() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {

            TeachersMapper teachersMapper = sqlSession.getMapper(TeachersMapper.class);
            TeachersExample teachersExample = new TeachersExample();
            Criteria criteria = teachersExample.createCriteria();
            criteria.andIdIsNotNull();
            //一定要放在查询的前面  不然无效
            Page<Object> page = PageHelper.startPage(3, 2);
            List<Teachers> teachers = teachersMapper.selectByExample(teachersExample);
            ////用PageInfo对结果进行包装  第二个参数表示 每次显示几个连续的分页
            PageInfo info = new PageInfo<>(teachers, 3);
            System.out.println("当前页码:"+info.getPageNum());
            System.out.println("总记录数:"+info.getTotal());
            System.out.println("每页的记录数:"+info.getPageSize());
            System.out.println("总页码:"+info.getPages());
            System.out.println("是否第一页:"+info.isIsFirstPage());
            int[] nums = info.getNavigatepageNums();
            //输出3个连续分页的页号
            for(int one:nums) {
                System.out.println(one);
            }
        }finally {
            sqlSession.close();
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_38409944/article/details/82556460