文章目录
- 1 分页查询——分页插件(PageHelper)
 - 1.1 概述
 - 1.2 代码实现
 - 1.2.1 在pom.xml引入依赖
 - 1.2.2 Mapper数据访问层实现
 - 1.2.3 Service业务逻辑层实现
 - 1.2.4 postman测试试
 
- 2 带条件的分页查询——分页插件(PageHelper)
 - 2.1 需求
 - 2.2 代码实现
 - 2.2.1 controller访问请求控制层代码实现
 - 2.2.2 Service业务逻辑层
 - 2.2.3 Mapper数据访问层
 - 2.2.4 MyBatis XML配置文件
 - 2.2.5 postman功能测试
 
1 分页查询——分页插件(PageHelper)
1.1 概述
官网: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 ? , ?
 
1.2 代码实现
1.2.1 在pom.xml引入依赖
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>
 
1.2.2 Mapper数据访问层实现
@Mapper
public interface EmpMapper {
    //获取当前页的结果列表
    @Select("select * from emp")
    public List<Emp> page(Integer start, Integer pageSize);
}
 
1.2.3 Service业务逻辑层实现
@Override
public PageBean page(Integer page, Integer pageSize) {
    // 设置分页参数
    PageHelper.startPage(page, pageSize); 
    // 执行分页查询
    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;
}
 
1.2.4 postman测试试
2 带条件的分页查询——分页插件(PageHelper)
2.1 需求
红框中三个条件非必须,因此我们使用动态SQL

2.2 代码实现
2.2.1 controller访问请求控制层代码实现
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
    @Autowired
    private EmpService empService;
    //条件分页查询
    @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,name, gender, begin, end);
        //调用业务层分页查询功能
        PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);
        //响应
        return Result.success(pageBean);
    }
}
 
2.2.2 Service业务逻辑层
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 {
    @Autowired
    private EmpMapper empMapper;
    @Override
    public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
        //设置分页参数
        PageHelper.startPage(page, pageSize);
        //执行条件分页查询
        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;
    }
}
 
2.2.3 Mapper数据访问层
@Mapper
public interface EmpMapper {
    //获取当前页的结果列表
    public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
}
 
2.2.4 MyBatis XML配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">
    <!-- 条件分页查询 -->
    <select id="list" resultType="com.itheima.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>
</mapper>
 























