分页插件PageHelper
- maven引入pageHelper与jsqlparser
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependercy>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>2.0</version>
</dependercy>
- mybatis-config.xml增加Plugin配置
<!-- 启用Pagehelper分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 设置数据库类型 -->
<property name="helperDialect" value="mysql" />
<!-- 分页合理化 -->
<property name="reasonable" value="true" />
</plugin>
</plugins>
- goods.xml
<select id="selectPage" resultType="com.imooc.mybatis.entity.Goods" >
select * from t_goods where current_price < 1000
</select>
- 代码中使用PageHelper.startPage()自动分页
session=MyBatisUtils.openSession();
/*startPage方法会自动将下一次查询进行分页*/
PageHelper.startPage(2,10);//pageNum 2 , pageSize 10
Page<Goods> page=(Page)session.selectList("goods.selectPage");
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<Goods> data=page.getResult();//当前页数据
不同数据库是怎么样实现分页的?
mysql
select * from table limit A,B;
A: 起始记录行, 下标从0开始.
B: 行数
oracle
select t3.* from(
select t2.* , rownum as row_num from (
select * from table order by id asc
) t2 where rownum<=B
) t3
where t2.row_num>A
A: 起始的记录数
B: 截至的记录数
sqlserver 2000
select top B * from table
where
id not in
(select top A id from table)
A: 前面不要的记录数
B: 截取多少个
sqlserver 2012+
select * from table order by id offset A rows fetch next B rows only
A: 从A开始截取
B: 截取多少行