MyBatis-Plus分页插件——PageHelper和IPage原理介绍两个都⽤于分页,常⽤的应该是PageHelper了,理解了⼀下源码后发现IPage⽐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>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version><!-- 3.2.0 -->
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</exclusion>
</exclusions>
</dependency>
IPage的好处:
适⽤于多⽅⾔的数据库类型;例如 MySQL、Oracle、SqlServer等。
注意:如果两个⼀起⽤,内部会先执⾏IPage的并进⾏分页然后会进⼊的PageHelper的分页处理。
优先使⽤的是IPage并且PageHelper会出现问题(不论谁前谁后)。返回Page是没问题的,
但是如果返回集合的结果集使⽤PageInfo进⾏分页就会出现问题。PageHelper只会有指定条数的数据。
所以只能使⽤⼀个,如果两个⼀起使⽤,则使⽤IPage返回Page接收。不可已使⽤PageInfo进⾏接收数据。
(当然这个的前提也是对同⼀个sql进⾏分页操作并返回的集合结果集)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论