mybatis之分页助手的使用
概述:
MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据
注意版本的问题:
-
pagehelper的版本问题,版本为5.0之后的插件使用的接口为:com.github.pagehelper.PageInterceptor
-
版本为4…0.0之前的版本采用的接口为:com.github.pagehelper.PageHelper
1.1. 开发步骤
1.1.1. 导入通用PageHelper的坐标
在pom.xml中导入通用PageHelper坐标
<!-- 分页助手的依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.1</version>
</dependency>
1.1.2. 在mybatis核心配置文件中配置PageHelper插件
在mybatis核心配置文件中配置PageHelper插件
<!-- 注意:分页助手的插件 配置在通用馆mapper之前 注意版本不同使用的接口不同,此处为5.1.4的版本的对应接口-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
1.1.3. 分页助手的具体使用
然后你就在你所需要使用到的地方进行相关的使用即可,此处在测试中进行分页代码的实现,展示相关的API
此处直接用 PageHelper调用它的静态方法startPage(当前页,显示的条数)即可。
代码的实现:
@Test
public void test1() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//设置分页参数
PageHelper.startPage(1,2);
List<User> list = mapper.findAll();
for (User user : list) {
System.out.println(user);
}
}
获取分页的其他参数:
//其他分页的数据
//此处只需要在建立PageInfo类,选择当前的类型,传入以上装载分页的数据的list集合即可
PageInfo<User> pageInfo = new PageInfo<User>(list);
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("当前页:"+pageInfo.getPageNum());
System.out.println("每页显示长度:"+pageInfo.getPageSize());
System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
1.2. 使用分页助手的注意事项
1.PageHelper只对紧跟着的第一个查询的SQL语句起作用
若一个方法中涉及到多个查询,需要小心,避免为不需要分页的添加了分页,而真正需要分页的却没有被分页
2.分页插件不支持带有for update语句的分页
对于带有for update的sql,会抛出异常,对于这样的sql建议手动分页,毕竟这样的sql需要注意
3.分页插件不支持关联结果查询
分页插件不支持关联结果查询,但是支持关联嵌套查询。只会对主sql进行分页,嵌套的sql不会被分页。