Mybatis分页查询
2025/12/12大约 1 分钟
Mybatis分页查询
前端请求传参:name,page(页码),pageSize(每页的记录数)
后端接收DTO,employeePageQueryDTO包含以上内容,
controller:
@GetMapping("/page")
@ApiOperation("员工分页查询")
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){
log.info("分页查询参数:{}",employeePageQueryDTO);
PageResult pageResult = employeeService.queryPage(employeePageQueryDTO);
return Result.success(pageResult);
}PageResult:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {
private long total; //总记录数
private List records; //当前页数据集合
}通过查询返回PageResult数据再封装给Result统一返回。
service:
/**
* 分页查询
* @param employeePageQueryDTO
* @return
*/
PageResult queryPage(EmployeePageQueryDTO employeePageQueryDTO);serviceImpl:
@Override
public PageResult queryPage(EmployeePageQueryDTO employeePageQueryDTO) {
//使用PageHelper动态拼接limit参数
//selcet * from employee limit 0,10
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
Page<Employee> page = employeeMapper.queryPage(employeePageQueryDTO);
long total = page.getTotal();
List<Employee> records = page.getResult();
return new PageResult(total,records);
}重点是使用了PageHelper插件,
PageHelper.startPage(页号,分页大小)
Mapper查询数据库返回的是Page(Page类是PageHelper自带的,继承了List所以接受的相当于多个查询的对象list)
/**
* 员工分页查询
* @param employeePageQueryDTO
* @return
*/
Page<Employee> queryPage(EmployeePageQueryDTO employeePageQueryDTO);Mapper.xml:
<select id="queryPage" resultType="com.sky.entity.Employee">
select * from employee
<where>
<if test="name != null and name!=''" >
and name like concat('%',#{name},'%')
</if>
</where>
order by create_time desc
</select>对名字模糊查询,使用了PageHelper自动拼接了Limit,动态更新,没必要写limit了
