版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}
}