Java Web Spring Boot 分页查询插件详解
在Java Web开发中,分页查询是一个常见的需求,尤其是在处理大量数据时。Spring Boot结合MyBatis的分页插件PageHelper,可以极大地简化分页查询的实现过程。下面我们将详细讲解如何在Spring Boot中使用PageHelper进行分页查询。
1. PageHelper简介
PageHelper是MyBatis的一款功能强大、方便易用的分页插件,支持任何形式的单表、多表的分页查询。它能够自动拦截SQL查询,并在查询前添加分页参数,查询后返回分页结果。
2. 引入PageHelper依赖
首先,在pom.xml
文件中引入PageHelper的依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
3. 配置PageHelper
在Spring Boot的配置文件application.properties
中,可以对PageHelper进行一些基本配置:
# 分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
4. 定义Mapper接口
在Mapper接口中,我们只需要定义一个方法来执行查询,无需手动处理分页逻辑:
@Mapper
public interface EmpMapper {
@Select("select * from emp")
List<Emp> list();
}
5. 定义Service类
在Service类中,调用Mapper的方法之前设置分页参数,在调用Mapper方法执行查询之后,解析分页结果,并将结果封装到PageBean对象中返回:
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
public PageBean page(Integer page, Integer pageSize) {
// 设置分页参数
PageHelper.startPage(page, pageSize);
// 执行分页查询
List<Emp> empList = empMapper.list();
// 获取分页结果
Page<Emp> p = (Page<Emp>) empList;
// 封装PageBean
PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
return pageBean;
}
}
6. 定义Controller类
在Controller类中,定义一个接口来处理分页查询请求:
@RestController
public class EmpController {
@Autowired
private EmpService empService;
@GetMapping("/emps")
public PageBean getEmps(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize) {
return empService.page(page, pageSize);
}
}
7. PageBean类
定义一个PageBean类来封装分页查询的结果:
public class PageBean {
private long total; // 总记录数
private List<?> rows; // 当前页数据
public PageBean(long total, List<?> rows) {
this.total = total;
this.rows = rows;
}
// getters and setters
}
8. 测试分页查询
功能开发完成后,我们重启项目工程,打开Postman,发起GET请求,访问:http://localhost:8080/emps?page=1&pageSize=5
,可以看到返回的分页查询结果。
9. 分页插件的工作原理
PageHelper分页插件的工作原理如下:
- 拦截SQL查询:PageHelper会拦截MyBatis的SQL查询请求。
- 获取SQL语句:获取到要执行的SQL语句,例如:
select * from emp
。 - 改造SQL语句:将SQL语句中的字段列表变为
count(*)
,执行select count(*) from emp
获取总记录数。 - 添加分页参数:对原SQL语句进行改造,在末尾添加
limit ? , ?
,例如:select * from emp limit ? , ?
。 - 执行分页查询:执行改造后的SQL语句,返回分页查询结果。
通过以上步骤,我们实现了Spring Boot中使用PageHelper进行分页查询的功能。PageHelper分页插件极大地简化了分页查询的实现过程,提高了开发效率。