MyBatis复习(八):MyBatis 分页插件 PageHelper

PageHelper是国人开源的一款MyBatis扩展插件,可以帮助完成自动分页功能。PageHelper自动分页插件使用非常简单,如果持久层框架用的是MyBatis,建议使用该分页插件。

引入分页插件

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.11</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
</dependency>

分页插件参数介绍

下面几个参数都是针对默认 dialect 情况下的参数。使用自定义 dialect 实现时,下面的参数没有任何作用。

  1. helperDialect:分页插件会自动检测当前数据库url链接,判断数据库类型自动选择合适的分页方式。也可以配置helperDialect属性来指定分页插件使用哪种数据库方言(mysql、oracle、sqlite、db2、sqlserver等)。

  2. reasoonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询,即pageNum=-1时,就会查询-1页,这样就会导致出错。(强烈建议设置该属性为true)

  3. 更多参数请参照官网


在mybatis-config.xml中配置拦截器插件

<plugins>
	<plugin interceptor="com.github.pagehelper.PageInterceptor">
		<!--设置数据库类型-->
		<property name="pageDialect" value="mysql"/>
		<!--设置分页合理化-->
		<property name="reasonable" value="true"/>
	</plugin>
</plugins>

在代码中使用

<select id="selectPage" resultType="User">
	select * from t_user where age &lt; 45
</select>
@Test
public void testPageHelper(){
    
    
	SqlSession sqlSession = null;
	try{
    
    
		sqlSession = MyBatisUtils.openSession();
		/* 开启自动分页,startPage()方法会自动将下一次查询进行分页 */
		PageHelper.startPage(pageNum, pageSize); //pageNum是页码,pageSize是页宽
		//获取分页对象
		List<User> userList = (Page) sqlSession.selectList("selectPage");
		//得到分页结果对象,分页信息都保存在pageInfo中
		PageInfo<User> page = new PageInfo<>(userList);
		System.out.println("总页数:" + page.getPages());
		System.out.println("总记录数:" + page.getTotal());
		System.out.println("开始行号:" + page.getstartRow());
		System.out.println("结束行号:" + page.getEndRow());
		System.out.println("当前页码:" + page.getPageNum());
		List<User> data = page.getResult(); //当前页的数据
		for(User u : data){
    
    
			System.out.println(u.getUserName());
		}
	}catch (Exception e){
    
    
        throw e;
    }finally {
    
    
        MyBatisUtils.closeSession(sqlSession);
    }
}




总结:

想要实现分页需要做哪些事:

  • 当前页数据查询:select * from tab limit 0, 10

  • 总记录数查询:select count(*) from tab

  • 通过程序计算总页数,上一页页码,下一页页码

当在使用了PageHelper分页插件后,这些事都不需要我们来做了,PageHelper会自动帮我们来完成。并且还扩充了更多的功能。

猜你喜欢

转载自blog.csdn.net/weixin_42950079/article/details/106309073