PageHelper
介绍
一款基于Mybatis实现分页的插件,用于代替手写limit进行分页,避免手动分页以及大量数据查询时速度过慢。
引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
具体使用
xml文件
查询所有用户
<select id="getAll" resultMap="userResultMap">
select * from `user`
</select>
Service实现
@Autowired
private UserDAO userDAO;
/**
* 查询用户
*
* @param pageNum 当前页码
* @param pageSize 一页的记录数
*/
public Page<User> getUserList(int currentPage, int pageSize) {
Page<User> userPage = PageHelper.startPage(currentPage, pageSize).doSelectPage(() -> userDAO.getAll());
return userPage;
}
可以看到最后返回一个Page<?>对象userPage,Page对象有很多内置方法,下面对常用的方法进行说明:
- getPageNum:获取当前页码
- getPages:获取总页数
- getTotal:获取总记录数
- getResult:获取当前页的数据,返回值是一个List集合,真正需要的数据就是这个List集合
Controller中使用分页
//查询第一页数据,每一页15条记录
userService.getUserList(1, 15).getResult();
第一个参数表示当前页,0和1都表示第一页,第二个参数表示每页显示条数,getResult()用于获取查询数据。
自定义分页对象
一般都会根据业务自行封装一个类用于分页后的返回结果。
import com.github.pagehelper.Page;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
/**
* 分页查询结果模型,存放整个结果分页基本信息和当前页信息以及内容
*/
@Setter
@Getter
@NoArgsConstructor
public class Paging<T> implements Serializable {
/**
* 当前页
*/
private int currentPageNum;
/**
* 总页数
*/
private int totalPageNum;
/**
* 每页记录数量
*/
private int pageSize;
/**
* 总记录数
*/
private long totalCount;
/**
* 当前页记录集合
*/
List<T> dataCurrentPage;
/**
* 传入Page结果对象构造Pageing对象
*
* @param pageResult 分页查询结果Page对象
*/
public Paging(Page<T> pageResult) {
this.currentPageNum = pageResult.getPageNum();
this.totalPageNum = pageResult.getPages();
this.totalCount = pageResult.getTotal();
this.pageSize = pageResult.getPageSize();
this.dataCurrentPage = pageResult.getResult();
}
}
在Service中使用自定义分页类
@Autowired
private UserDAO userDAO;
/**
* 查询用户
*
* @param pageNum 当前页码
* @param pageSize 一页的记录数
*/
public Paging<User> getUserList(int currentPage, int pageSize) {
Page<User> userPage = PageHelper.startPage(currentPage, pageSize).doSelectPage(() -> userDAO.getAll());
Paging<User> userPaging = new Paging<User>(userPage);
return userPaging;
}
参考博文:juejin.cn/post/698909… 作者:守望时空33