一 pagehelp引入原因
该插件可以自动帮我们计算start以及SQL查询想要展示数据语句,例如:
@Select("select * from emp limit #{start},#{pageSize};")
这种查询语句,他都会帮我们自动的完成。
1.在分页查询当中我们需要接收的参数有count(数据总数),result(查询结果,即需要展示的数据),并且在Controller当中我们也需要根据接收到的page(页面序号),pageSize(每个页面需要展示的数据条数),值得一说的是我们可以使用@RequestParam注解当中的defaultValue来设置属性的默认值
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
然后根据起始索引计算公式start = (page-1)*pageSize,得出start,最后根据SQL语句当中的查询语句来得到结果。这种传统方式步骤更为固定,代码繁琐。
2.需要导入的pom.xml相关依赖:
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
3.由此引入pagehelper插件来进行优化分页查询:
Controller层代码:
@GetMapping
public 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,begin,end);
PageBean pageBean = empService.page(page, pageSize,name, gender, begin, end);
return Result.success(pageBean);
}
Service层代码:
PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
/**
* 使用pagehelp插件来优化分页查询
*/
@Override
public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
//设置分页参数
PageHelper.startPage(page, pageSize);
//执行查询操作,并将结果转换为Page形式
List<Emp> empList = empMapper.list(name,gender,begin,end);
Page<Emp> p = (Page<Emp>) empList;
//封装为一个pageBean对象
PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
return pageBean;
}
Mapper层代码:
public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
<select id="list" resultType="com.example.springbootitheima.pojo.Emp">
select *
from emp
<where>
<if test="name != null and name != ''">
name like concat('%', #{name}, '%')
</if>
<if test="gender != null">
and gender = #{gender}
</if>
<if test="begin != null and end != null">
and entrydate between #{begin} and #{end}
</if>
</where>
order by update_time desc
</select>
这种方式不仅简化了代码量,而且使得代码逻辑更加严谨,减少查询数据库操作