分页插件
两个都用于分页,常用的应该是PageHelper了,
使用方法是 PageHelper.startPage()然后后边写sql就可以。 紧接着的一个sql起作用。
IPage则需要在dao层传入IPage的实现类Page对象,该对象实现了IPage。
区别:
PageHelper内部原理是将传入的页码和条数赋值给了Page对象,保存到了一个本地线程ThreadLoacl中,然后会进入Mybatis的拦截器中。
然后再拦截器中获取本地线程中保存的分页的参数。最后再将这写分页参数和原本的sql以及内部定义好的sql进行拼接完成sql的分页处理。
中间会进行判断该sql 的类型是查询还是修改操作。如果是查询才会进入分页的逻辑并判断封装好的Page对象是否是null,null则不分页,否则分页。
IPage内部原理也是基于拦截器,但是这个拦截的是方法以及方法中的参数,这个也会判断是否是查询操作。如果是查询操作,才会进入分页的处理逻辑。
进入分页逻辑处理后,拦截器会通过反射获取该方法的参数进行判断是否存在IPage对象的实现类。如果不存在则不进行分页,存在则将该参数赋值给IPage对象。
然后进行拼接sql的处理完成分页操作。
但是使用IPage需要注入一个bean拦截器交给spring进行管理。如下。否则不会进行拦截。
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
pom: springboot使用的是2.1.0
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>