传统的分页查询
分析
select * from emp limit ?,?
select count(*) from emp;
我们可以去定义一个实体类去接收后台返回给前端的数据
@Data
public class PageBean{
private Long total; //总记录数
private List rows; //当前页数据列表
}
Mapper
@Mapper
public interface EmpMapper{
// 查询总记录数数
@Select("select count(*) from emp")
public Long count();
// 进行分页查询获取列表数据
// @param start 起始索引
// @param pageSize 每页展示的记录数
// @return
@Select("select * from emp limit #{start},#{pageSize}")
public List<Emp> page(Integer start,Integer pageSize);
}
Controller
@Slf4j
@RestController
public class EmpController {
@Autowired
pivate EmpService empService;
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") Integer page,
@RquestParam(defaultValue = "10") Integer pageSize)
PageBean pageBean = empService.page(page,pageSize);
return Result.success(pageBean);
}
@Service
@Override
public pageBean page(Integer page,Integer pageSize){
//1.获取总记录数
Long count = empMapper.count();
//2.获取分页查询结果列表
Integer start = (page-1) * pageSize;
List<Emp> empList = empMapper.page(start,pageSize);
//3.封装pageBean对象
PageBean pageBean = new PageBean(count,empList);
return pageBean;
}
小结:
@RequestParam 的属性defaultValue 可以来设置参数的默认值
分页插件pageHelper
你会发现原始模式会比较繁琐,步骤固定但是代码繁琐
分页插件帮我们写了哪些SQL?
select count(*) from emp;
select * from emp limit #{start},#{pageSize}
调用startPage()
;方法传入page 和pageSize
然后再把查询的结果强行转为page
核心代码
PageHelper.startPage(page,pageSize);
Limit<Emp> empList = empMapper.list();
Page<Emp> p = (Page<Emp>) empList;
PageBean pageBean = new PageBean(p.getTotal(),p.getResult());
return pageBean;
引入依赖
<!-- 分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
Mapper
@Select("select * from emp")
public List<Emp> list();
Service
所有与分页相关的操作都是由插件帮我们完成,我们只需要执行正常的查询