官网:https://pagehelper.github.io/
在执行empMapper.list()方法时,就是执行:select * from emp 语句,怎么
实现分页操作
?分页插件帮我们完成了以下操作:
- 先获取到要执行的SQL语句:select * from emp
- 把SQL语句中的字段列表,变为:count(*)
- 执行SQL语句:select count(*) from emp //获取到总记录数
- 再对要执行的SQL语句:select * from emp 进行改造,在末尾添加 limit ? , ?
- 执行改造后的SQL语句:select * from emp limit ? , ?
com.github.pagehelper pagehelper-spring-boot-starter 1.4.2
@Mapper
public interface EmpMapper {//获取当前页的结果列表@Select("select * from emp")public List page(Integer start, Integer pageSize);
}
@Override
public PageBean page(Integer page, Integer pageSize) {// 设置分页参数PageHelper.startPage(page, pageSize); // 执行分页查询List empList = empMapper.list(name,gender,begin,end); // 获取分页结果Page p = (Page) empList; //封装PageBeanPageBean pageBean = new PageBean(p.getTotal(), p.getResult()); return pageBean;
}
红框中三个条件非必须,因此我们使用动态SQL
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;//条件分页查询@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {//记录日志log.info("分页查询,参数:{},{},{},{},{},{}", page, pageSize,name, gender, begin, end);//调用业务层分页查询功能PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);//响应return Result.success(pageBean);}
}
public interface EmpService {/*** 条件分页查询* @param page 页码* @param pageSize 每页展示记录数* @param name 姓名* @param gender 性别* @param begin 开始时间* @param end 结束时间* @return*/PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
}
2.2.2.1 Impl实现类
@Slf4j
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {//设置分页参数PageHelper.startPage(page, pageSize);//执行条件分页查询List empList = empMapper.list(name, gender, begin, end);//获取查询结果Page p = (Page) empList;//封装PageBeanPageBean pageBean = new PageBean(p.getTotal(), p.getResult());return pageBean;}
}
@Mapper
public interface EmpMapper {//获取当前页的结果列表public List list(String name, Short gender, LocalDate begin, LocalDate end);
}