Mybatis基于PageHelper插件实现分页查询

390 阅读2分钟

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