分页的3种方式
第一种limit
通过sql的limit关键字进行分页
select * from user where sex='男' limit 1,10;
缺点:利用limit分页全表扫描,越往最后查,越慢
第二种通过最大id加limit分页
select * from user where id>#{maxid} limit 10;
弥补了第一种方式的缺点,常用
第三种方式分页插件
- 添加依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.6</version> </dependency>
- 需要在SqlMapConfig.xml中配置插件。
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
- 在查询的sql语句执行之前,添加一行代码:
PageHelper.startPage(1, 10);
第一个参数是page,要显示第几页。
第二个参数是rows,没页显示的记录数。 - 第四步:取查询结果的总数量。
第四种IPage和Page
controller
Integer currentPage = 1; //当前页数:显示第一页数据
Integer pageSize = 2; //每页显示多少:每页显示2条数据
Page<Map> page = new Page<Map>(currentPage, pageSize);
IPage<Map> findList = interService.findlistpage(page);
servlet
public IPage<Map> findlistpage(Page<Map> page) {
return interDao.selectMapsPage(page, null);
}
mapper
IPage<Map> selectMapsPage(Page<Map> page, QueryWrapper<List<Map<String, Object>>> wrapper);}
mapper xml
<select id="selectMapsPage" resultType="java.util.Map" parameterType="java.util.Map">
SELECT * FROM user
</select>
使用场景
- 页面有分页需求
- 查询数据后将数据放在list等集合中,分批次查询可以避免内存溢出情况的发生。