首先分页查询的原理是SQL的limit关键字。
LIMIT 子句用于限制 SQL 查询返回的记录数。它接受一个或两个整数参数,第一个参数表示偏移量,第二个参数表示返回的最大记录数。
我们完全可以使用前端传给我们的page,pageSize,自己去计算limit的参数,但是这样效率很慢。
所以有了分页插件pageHelper.
1 首先引入pageHeper的Maven坐标
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> </dependency>
2 在Controller层接受分页请求
主要参数是Page(第几页),PageSize(一页的大小)
java
@GetMapping("/page")
public Result<PageResult> Page(EmployeePageQueryDTO employeePageQueryDTO)
{
PageResult pageResult=employeeService.PageQuery(employeePageQueryDTO);
return Result.success(pageResult);
}
这里参数用一个对象接收
3 Service层逻辑处理
PageHepler可以帮助我们计算limit的参数,并同时帮我们把limit加在普通的select语句中,变成分页查询。这样一来执行分页,我们只需要在Mapper配置普通的查询语句,由PageHelper帮我们补上limit所需语句。
page继承了ArrayList,所以它可以接收查询的返回结果,多个数据本身就会返回一个集合。
如果不想用Page,直接使用ArrayList也是可以的,只不过Page有更多的功能,所以pageHeper和Page不是一定要一起使用.看自己的需求选择。
java
/**
* 员工分页查询
* @param employeePageQueryDTO
* @return
*/
@Override
public PageResult PageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
// PageHepler可以帮助我们计算limit的参数,并同时帮我们把limit加在普通的select语句中,变成条件查询。
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
//执行分页,我们只需要在Mapper配置普通的查询语句,由上面的帮我们补上limit所需语句。
//page继承了ArrayList,所以它可以接收查询的返回结果,多个数据本身就会返回一个集合。
//如果不想用Page,直接使用ArrayList也是可以的,只不过Page有更多的功能
Page<Employee> pages=employeeMapper.PageQuery(employeePageQueryDTO);
PageResult pageResult=new PageResult();
pageResult.setRecords(pages.getResult());
return pageResult;
}
4 Mapper层的SQL配置
Mapper接口
java
/**
* 员工分页查询
* @param employeePageQueryDTO
* @return
*/
Page<Employee> PageQuery(EmployeePageQueryDTO employeePageQueryDTO);
Mapper对应SQL
<select id="PageQuery" resultType="Employee"> select * from employee <where> <if test="name!=null and name!=''"> name like concat("%",#{name},"%") </if> </where> </select>
很明显这里只是一个普通的查询,并没有limit语句,这正是pageHelper的作用,帮我们计算好参数,然后加入SQL语句。