分页插件PageHepler
在分页功能实现的文章中,文章传送门:SpringBoot案例-员工管理-分页查询-实现_熵240的博客-CSDN博客
其中实现分页功能的主要代码如下:
Mapper接口
package com.example.tlias.mapper;
import com.example.tlias.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface EmpMapper {
/**
* 获取数据总数
*
* @return
*/
@Select("select count(*) from emp")
public long CountAll();
/**
* 获取每页数据信息
*
* @return
*/
@Select("select * from emp limit #{start},#{pageSize}")
public List<Emp> GetData(Integer start, Integer pageSize);
}
业务实现层
package com.example.tlias.service.impl;
import com.example.tlias.mapper.EmpMapper;
import com.example.tlias.pojo.Emp;
import com.example.tlias.pojo.PageBean;
import com.example.tlias.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
public PageBean Page(Integer page, Integer pageSize) {
// 获取总记录数
long count = empMapper.CountAll();
Integer start = page * pageSize - pageSize;
// 获取分页查询结果列表
List<Emp> list = empMapper.GetData(start, pageSize);
// 封装PageBean对象
PageBean pageBean = new PageBean(count, list);
return pageBean;
}
}
使用MyBatis的分页插件PageHepler,可以完成统计总记录数、指定分页参数的功能,我们只需要进行正常的查询功能就可,详细了解PageHepler插件见:如何使用分页插件 (pagehelper.github.io)https://pagehelper.github.io/docs/howtouse/
具体关键代码如下
Mappper接口
package com.example.tlias.mapper;
import com.example.tlias.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface EmpMapper {
// todo 原始分页代码
// /**
// * 获取数据总数
// *
// * @return
// */
// @Select("select count(*) from emp")
// public long CountAll();
//
// /**
// * 获取每页数据信息
// *
// * @return
// */
// @Select("select * from emp limit #{start},#{pageSize}")
// public List<Emp> GetData(Integer start, Integer pageSize);
/**
* 员工信息的查询
* 使用pagehepler插件
*
* @return
*/
@Select("select * from emp")
public List<Emp> list();
}
业务实现层
package com.example.tlias.service.impl;
import com.example.tlias.mapper.EmpMapper;
import com.example.tlias.pojo.Emp;
import com.example.tlias.pojo.PageBean;
import com.example.tlias.service.EmpService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
// todo 原始方法代码
// public PageBean Page(Integer page, Integer pageSize) {
// // 获取总记录数
// long count = empMapper.CountAll();
// Integer start = page * pageSize - pageSize;
// // 获取分页查询结果列表
// List<Emp> list = empMapper.GetData(start, pageSize);
// // 封装PageBean对象
// PageBean pageBean = new PageBean(count, list);
// return pageBean;
//
// }
// todo 使用pageHepler插件代码
public PageBean Page(Integer page, Integer pageSize) {
// 设置分页参数
PageHelper.startPage(page, pageSize);
// 执行正常查询操作
List<Emp> empList = empMapper.list();
Page<Emp> p = (Page<Emp>) empList;
// 封装分页结果PageBean
PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
return pageBean;
}
}
在业务实现层中,首先调用PageHepler插件中的startPage()方法,设置查询页码(page)和页面容量(pageSize),然后调用Mapper接口中的list()方法,获取所有的结果集合,然后将结果集合进行类型转化,最后将查询结果进行封装,其中参数,可直接调用pageHepler中的gettotal()和getResult()方法进行设置。
gettotal()方法获取总数据容量数,执行的SQL语句为:select count(*) from 数据表
getReault()方法获取页面显示的数据列表:执行的SQL语句为:select * from 数据表 limit #{start},#{pageSize},其中start参数以及通过传递的page参数计算出来了。
运行测试
重启SpringBoot项目,依然是启动postman进行测试,请求地址以及请求参数如下:
运行结果为:
{
"code": 1,
"msg": "success",
"data": {
"total": 17,
"rows": [
{
"id": 1,
"username": "jinyong",
"password": "123456",
"name": "金庸",
"gender": 1,
"image": "1.jpg",
"job": 4,
"entrydate": "2000-01-01",
"deptId": 2,
"creteTime": null,
"updateTime": "2023-08-07T15:44:50"
},
{
"id": 2,
"username": "zhangwuji",
"password": "123456",
"name": "张无忌",
"gender": 1,
"image": "2.jpg",
"job": 2,
"entrydate": "2015-01-01",
"deptId": 2,
"creteTime": null,
"updateTime": "2023-08-07T15:44:50"
},
{
"id": 3,
"username": "yangxiao",
"password": "123456",
"name": "杨逍",
"gender": 1,
"image": "3.jpg",
"job": 2,
"entrydate": "2008-05-01",
"deptId": 2,
"creteTime": null,
"updateTime": "2023-08-07T15:44:50"
}
]
}
}
上述两条SQL语句,我们并没有编写,这都是PageHepler插件自动进行执行的,以获取所需的参数
小结
- 引入依赖
- 使用
- // 设置分页参数
PageHelper.startPage(pageNum, pageSize);
// 执行正常查询操作
List<Emp> empList = empMapper.list();
Page<Emp> p = (Page<Emp>) empList;
- // 设置分页参数