Mybaits-plus分页插件PaginationInnerInterceptor实现分析

  1. mybatis-plus-boot-starter自动配置文件spring.factories中配置了类com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

  1. 在spring在创建MybatisPlusAutoConfiguration 对象时通过构造器注入Interceptor类型的对象数组。

  1. 在调用sqlSessionFactory方法创建SqlSessionFactory时会将拦截器数组interceptors设置在MybatisSqlSessionFactoryBean的plugins属性中。

在方法最后一行会调用MybatisSqlSessionFactoryBean的getObject方法,方法内部调用buildSqlSessionFactory方法创建SqlSessionFactory时将plugins拦截器加入到SqlSessionFactory对象的Configuration属性中interceptorChain属性。

这时已经将拦截器放入到SqlsessionFactory中了,在查询或者更新等操作时会通过SqlsessionFactory对象获取session。

下面再看一下DefaultSqlSessionFactory的openSession方法,次方法会调用openSessionFromDataSource方法。

Executor,configuration是不是都很熟,看newExecutor方法。

interceptorChain是不是也很熟,再跟pluginAll方法。

在这个类中还可以看到对其他三个扩展点的实现。

继续看plugin方法。target是executor,resultSetHandler,statementHandler,parameterHandler哦。是不是会调用Interceptor的pluin方法啊,所以我们做扩展时也要实现此接口。

看一下怎么实现的吧。

不用说MybatisPlusInterceptor实现了Interceptor接口了。

有意思的是plugin方法。

刚才在pluginAll方法中会调用plugin方法,在plugin方法中会创建target的代理对象Plugin。

在调用代理类Plugin的invoke方法时就调用到了MybatisPlusInterceptor的intercept方法。signatureMa是解析Interceptor实现类上的注解@Intercepts后得到的过滤条件,满足条件的方法才会执行Interceptor的intercept方法。

再看一下MybatisPlusInterceptor的intercept方法实现。

这里的InerInterceptor包含配置的分页插件。

构建分页sql。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus是一个基于MyBatis的增强工具,它提供了一些便捷的功能,其中包括分页查询。在使用MyBatis-Plus进行分页查询时,你需要按照以下步骤进行操作: 1. 引入MyBatis-Plus的依赖:在你的项目中添加MyBatis-Plus的相关依赖,可以通过Maven或Gradle进行配置。 2. 创建实体类:创建一个与数据库表对应的实体类,并使用MyBatis-Plus的注解进行配置,例如`@TableName`、`@TableId`等。 3. 创建Mapper接口:创建一个Mapper接口,使用MyBatis的注解和MyBatis-Plus提供的方法进行查询操作。在接口中,可以使用`Page`对象进行分页参数的配置。 4. 使用PageHelper进行分页设置:在查询方法中,使用`PageHelper.startPage(pageNum, pageSize)`设置分页参数,其中`pageNum`表示当前页码,`pageSize`表示每页显示的记录数。 5. 返回分页结果:将查询结果封装到`Page`对象中,并将该对象作为方法的返回值。 下面是一个示例: ```java // 实体类 @TableName("user") public class User { @TableId private Long id; private String name; // 省略getter和setter } // Mapper接口 public interface UserMapper extends BaseMapper<User> { List<User> selectUserList(Page<User> page); } // 查询方法 public Page<User> getUserList(int pageNum, int pageSize) { Page<User> page = new Page<>(pageNum, pageSize); List<User> userList = userMapper.selectUserList(page); page.setRecords(userList); return page; } ``` 以上是使用MyBatis-Plus进行分页查询的基本步骤,你可以根据具体的业务需求进行相应的配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值