PageHelper

详细的案例可以在Java Tlias项目中的员工分页查询下查看

  • PageHelper是第三方提供的在MyBatis框架中用来实现分页的插件,用来简化分页操作,提高开发效率
  • 使用步骤:
    1. 引入PageHelper的依赖
    2. 定义Mapper接口的查询方法(无需考虑分页)
    3. 在Service方法中实现分页查询
1
2
3
4
5
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.7</version>
</dependency>
1
2
3
// 查询员工数据
@Select("SELECT e.* FROM emp e ...")
public List<Emp> list();
1
2
3
4
5
6
7
8
9
10
11
public PageResult<Emp> page(Integer page, Integer pageSize) {
// 1. 设置分页参数
PageHelper.startPage(page, pageSize);

// 2. 调用Mapper接口方法
List<Emp> empList = emMapper.list();

// 3. 解析并封装结果
Page<Emp> p = (Page<Emp>) list; // 父类需要调用子类特有的方法,所以需要向下转型
return new PageResult<Emp>(...);
}

当调用Mapper层的list方法查询时,PageHelper会通过MB的拦截器加上分页参数,并且返回的实际上是Page类型对象

用的是List接受返回的数据,**因为Page是List的实现类**,子类不需要强转就可以直接使用父类赋值

但是又由于需要调用Page的特有方法,所以父类又需要**向下转型**为子类

实现机制:

  • 通过MB拦截器对SQL语句进行修改
    • SELECT COUNT(0) FROM emp p …
    • SELECT … FROM emp e … LIMIT ?, ?

注意事项:

  • SQL语句结尾不要加分号;
    • 正确:@Select("SELECT ... FROM emp ...")
    • 错误:@Select("SELECT ... FROM emp ...;")
  • PageHelper只会对紧跟在其后的第一条SQL语句进行分页处理