一、在EmployeeController中编写控制器代码
@GetMapping("/page")
@ApiOperation("员工分页查询")
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){
log.info("员工分页查询,参数为{}",employeePageQueryDTO);
PageResult pageResult =employeeService.pageQuery(employeePageQueryDTO);
return Result.success(pageResult);
}
首先同上配置一个get的注解,返回封装的Result,方法命名为page,由于这是一个GET请求,所以这些参数将通过URL的查询字符串传递。Spring MVC 会自动将查询字符串中的键值对映射到 EmployeePageQueryDTO
对象的属性上。所以不用和上此一样使用@RequestBody注解。
二、定义一个pageQuery方法
EmployeeServiceImpl
PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
EmployeeServiceImpl
@Override
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
//select*from employee limit 0,10
//开始分页查询
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
Page<Employee> page=employeeMapper.pageQuery(employeePageQueryDTO);
long total = page.getTotal();
List<Employee> records = page.getResult();
return new PageResult(total,records);
}
PageQuery
方法接收一个 EmployeePageQueryDTO
类型的参数,并返回一个 PageResult
类型的对象
定义PageResult类
package com.sky.result;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* 封装分页查询结果
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {
private long total; //总记录数
private List records; //当前页数据集合
}
使用 MyBatis 的 PageHelper
工具类来设置分页参数
1.设置分页参数
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
employeePageQueryDTO.getPage()
是当前页码。
employeePageQueryDTO.getPageSize()
是每页的记录数量
2.执行分页查询:
Page<Employee> page=employeeMapper.pageQuery(employeePageQueryDTO);
这里调用 employeeMapper
的 pageQuery
方法来执行分页查询
employeeMapper
是 MyBatis 的 Mapper 接口,用于执行数据库操作
employeeMapper
Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
<mapper namespace="com.sky.mapper.EmployeeMapper">
<select id="pageQuery" resultType="com.sky.entity.Employee">
select *
from sky_take_out.employee
<where>
<if test="name !=null and name!=''">
and name like concat('%',#{name},'%')
</if>
</where>
order by create_time desc
</select>
</mapper>
employeePageQueryDTO
通常包含用于查询的条件。
3.获取分页信息
long total = page.getTotal();
List<Employee> records = page.getResult();
获取总的记录数和List<Employee> records = page.getResult();
获取当前页的记录列表。
4.构建并返回 PageResult
对象
三、返回进行分页查询后的pageResult
return Result.success(pageResult);
到这里,实现了员工的分页查询和模糊查询