一、基于sql语句limit的分页
<!--mapper映射文件中-->
<select id="selectuserlimit" resultType="com.wj.dao.pojo.User">
select * from tb_user order by creationDate DESC
limit #{from},#{pageSize}
</select>
第一个参数是相对于首行的偏移量,第二个参数是返回的行数
//mapper接口中
public List<User> selectuserlimit(
@Param("from") Integer currentPage,
@Param("pageSize") Integer pageSize
);
***mybatis的分页也是基于limit实现的,当偏移量大是会对性能有所影响,因为 limit 1000,10 的执行是先获取1010条数据,然后去除前1000条,把剩余的10条给你。第一个参数,即偏移量的计算式为 (页码-1)× 页面容量。
***mybatis分页功能基于内存,先查所有再取出
二、分页类RowBounds实现分页
RowBounds是mybatis提供的处理分页的类
//mapper接口中
public List<User> selectuserlimit(
// @Param("from") Integer currentPage,
// @Param("pageSize") Integer pageSize
RowBounds rowBounds //以该对象作为参数
);
<select id="selectuserlimit" resultType="com.wj.dao.pojo.User">
select * from tb_user order by creationDate DESC
<!--limit #{from},#{pageSize}-->
<!--使用rowbounds实现分页时不用写limit-->
</select>
//测试类
@Test
public void select_all() throws IOException {
try (SqlSession sqlSession = MybatisUtil.createSqlsession()) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
RowBounds rowBounds = new RowBounds(0,15);
List<User> users = userMapper.selectuserlimit(rowBounds);
for (User user : users) {
System.out.println(user.getId()+"/"+user.getUserName()+"/"+user.getCreationDate());
}
}
}
}
三、分页助手插件PageHelper完成分页
##1、引入依赖 pagehelper.jar和jsqlparser.jar
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.2</version>
</dependency>
通过maven引入,pagehelper时会自己添加jsqlparser依赖
##2、使用
<!--mybatis-congif.xml中 ,注意plugins标签的位置,要在别名之后,环境之前-->
<plugins>
<!--包名-->
<!--最新版5.3.2的类为下面配置的,而不是
com.github.pagehelper.PageHelper,
配置错会报错
PageHelper:com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor
-->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--数据库方言-->
<!--<property name="dialect" value="mysql"/>-->
<!--分页查询总数-->
<property name="rowBoundsWithCount" value="true"/>
<!--支持mapper接口传递分页参数-->
<property name="supportMethodsArguments" value="true"/>
</plugin>
</plugins>
//接口照常写
public List<User> sellectall();
<!--映射语句照常写-->
<select id="sellectall" resultType="com.wj.dao.pojo.User">
select *
from tb_user <!--sql语句结束后不要写冒号,不然语句拼接会出错-->
</select>
//使用分页助手
@Test
public void fun1(){
SqlSession session = MybatisUtil.createSqlsession();
UserMapper userMapper = session.getMapper(UserMapper.class);
//开启分页,传入参数
PageHelper.startPage(1,5);
//查询数据
List<User> users = userMapper.sellectall();
//将数据放入分页对象
PageInfo<User> userPageInfo = new PageInfo<User>(users);
//查看结果userPageInfo.getList()
for (User user : userPageInfo.getList()) {
System.out.println(user.getId()+"/"+user.getUserName()+"/"+user.getCreationDate());
}
session.close();
}
更多PageHelper的使用请参考pagehelper 项目在github地址