Spring Boot使用PageHelper进行分页
文章目录
一、简介:
pagehelper 分页插件,pagehelper 是一个强大实用的 MyBatis 分页插件,可以帮助我们快速的实现MyBatis分页功能,而且pagehelper有个优点是,分页和Mapper.xml完全解耦,并以插件的形式实现,对Mybatis执行的流程进行了强化,这有效的避免了我们需要直接写分页SQL语句来实现分页功能。在Dao层并不需要写分页SQL,分页插件会拦截查询请求,并读取前台传来的分页查询参数重新生成分页查询语句。
二、案例代码
1、pom.xml
首先,我们需要在 pom.xml 文件中添加分页插件依赖包。
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
2、application.properties
然后在 application.properties配置文件中添加分页插件有关的配置。
#分页助手
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
3、WordSelectController.java
在控制器SysUserController中添加分页查询方法,并调用服务层的分页查询方法。
//分页查询
@RequestMapping(value = "/findPage")
public Object findPage(@RequestBody Map<String,Object> map) {
//起始索引:
Integer pageNum = Integer.parseInt(params.get("pageNum").toString());
//查询的条数
Integer pageSize = Integer.parseInt(params.get("pageSize").toString());
//调用server层进行分页查询
return findPageResult = wordSelectService.findPage(pageNum, pageSize);
}
4、WordSelectServiceImpl.java
服务层通过调用DAO层代码完成分页查询,这里统一封装分页查询的请求和结果类;
@Override
public PageResult findPage(int pageNum,int pageSize) {
// 1、分页从数据库中查询
PageHelper.startPage(pageNum, pageSize);
List<English> sysMenus = englishDao.selectPage();
logger.info("查询数据库的返回值为====="+sysMenus.toString());
// 2、对返回值进行判断
if (sysMenus.size()==0){
return null;
}
// 3、对查询的结果进行封装
PageInfo<English> englishPageInfo = new PageInfo<>(sysMenus);
PageResult pageResult = PageUtils.getPageResult(englishPageInfo);
return pageResult;
}
5、EnglishDao
在 Dao 层添加一个分页查找方法;
// 分页查询
List<English> selectPage( );
6、EnglishDao.xml
然后在 SysUserMapper.xml 中加入selectPage的实现,这是一个普通的查找全部记录的查询语句,并不需要写分页SQL,分页插件会拦截查询请求,并读取前台传来的分页查询参数重新生成分页查询语句。
<!--分页查询-->
<select id="selectPage" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from english
</select>
7、PageUtils.java
分页查询请求封装类;
import com.github.pagehelper.PageInfo;
import com.lydms.pojo.PageResult;
public class PageUtils {
//将分页信息封装到统一的接口
public static PageResult getPageResult(PageInfo<?> pageInfo) {
PageResult pageResult = new PageResult();
pageResult.setPageNum(pageInfo.getPageNum());
pageResult.setPageSize(pageInfo.getPageSize());
pageResult.setTotalSize(pageInfo.getTotal());
pageResult.setTotalPages(pageInfo.getPages());
pageResult.setContent(pageInfo.getList());
return pageResult;
}
}
8、PageResult.java
分页查询结果封装类。
public class PageResult {
/**
* 当前页码
*/
private int pageNum;
/**
* 每页数量
*/
private int pageSize;
/**
* 记录总数
*/
private long totalSize;
/**
* 页码总数
*/
private int totalPages;
/**
* 数据模型
*/
private List<?> content;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getTotalSize() {
return totalSize;
}
public void setTotalSize(long totalSize) {
this.totalSize = totalSize;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public List<?> getContent() {
return content;
}
public void setContent(List<?> content) {
this.content = content;
}
}
三、postman调用测试
postman调用的参数
http://localhost:80/select/findPage
{
"pageNum":"2",
"pageSize":"2"
}
postman返回值:
{
"status": 200,
"errmsg": "成功",
"data": {
"pageNum": 2,
"pageSize": 2,
"totalSize": 102,
"totalPages": 51,
"content": [
{
"englishid": 3,
"english": "request",
"chinese": "请求",
"remark": ""
},
{
"englishid": 4,
"english": "apple",
"chinese": "苹果",
"remark": ""
}
]
}
}