分页插件PageHelper
1)传统的分页代码分析
以查询员工数据信息为例子
@Mapper数据访问层
@Mapper
public interface EmpMapper {
//获取总记录数
@Select("select count(*) from emp")
public Long count();
//分页查询,获取数据列表,因为开始索引和每页展示多少数据是前端传递过来的,所以需要用形参
@Select("select * from emp limit #{start},#{pageSize}")
public List<Emp> page(Integer start,Integer pageSize);
}
@Service业务逻辑层
@Service
public class EmpServiceImpl implements EmpService {
/**
* 在@Service业务逻辑层实现类中需要调用mapper接口的
* @param page
* @param pageSize
* @return
*/
@Autowired//通过@Autowired注入进来EmpMapper对象,调用方法进行数据访问操作
private EmpMapper empMapper;
@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);
//4.把封装后的结果返回给@RestController控制层
return pageBean;
}
}
@RestController控制层
@Slf4j
@RestController
public class EmpController {
@Autowired
private EmpService empService;
@GetMapping("/emps")
public Result page(Integer page,Integer pageSize){
//如果没选择,默认选择第一页,每页10条数据显示
if(page == null) page=1;
if(pageSize == null) pageSize=10;
//控制台打印日志信息
log.info("分页查询,参数:{},{}",page,pageSize);
//调用service层分页查询,查询有返回值:pageBean对象
PageBean pageBean= empService.page(page,pageSize);
//把响应数据结果pageBean对象返回给前端渲染
return Result.success(pageBean);
}
}
2)使用分页插件PageHelper代码分析
引入依赖
<!--PageHelper分页插件依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
注意说明:1.4.2版本的进行强制转换会报错,1.4.6的解决了这个问题
@Mapper数据访问层
@Mapper
public interface EmpMapper {
//使用PageHelper插件进行分页查询,只需要基本的查询语句
@Select("select * from emp")
public List<Emp> list();
}
@Mapper
数据库访问层只需要基本的一条查询全部信息的语句即可
@Service业务逻辑层
@Service
public class EmpServiceImpl implements EmpService {
/**
* 在@Service业务逻辑层实现类中需要调用mapper接口的
* @param page
* @param pageSize
* @return
*/
@Autowired//通过@Autowired注入进来EmpMapper对象,调用方法进行数据访问操作
private EmpMapper empMapper;
//使用插件来进行分页查询
@Override
public PageBean page(Integer page, Integer pageSize) {
//1、设置分页参数
PageHelper.startPage(page,pageSize);
//2.执行查询
List<Emp> empList=empMapper.list();
//empList类型强制转换成Page<Emp>类型
Page<Emp> p=(Page<Emp>) empList;
//3,封装PageBean对象
PageBean pageBean=new PageBean(p.getTotal(),p.getResult());
return pageBean;
}
}
@RestController控制层不变