Mybatis 中理解分页如何使用 Interceptor 接口实现

在这里插入图片描述

通过 Mybatis 执行分页 SQL 有两种实现方式, 一种是编写 SQL 时添加 LIMIT, 一种是全局处理


01、SQL 分页

<select id="getSubjectByPage" resultMap="resultAutoMap">
    SELECT * FROM SUBJECT LIMIT #{CURRINDEX} , #{PAGESIZE}
</select>

02、拦截器分页

上文说到, Mybatis 支持了插件扩展机制, 可以拦截到具体对象的方法以及对应入参级别

我们添加插件时需要实现 Interceptor 接口, 然后将插件写在 mybatis-config.xml 配置文件中或者添加相关注解, Mybatis 初始化时解析才能在项目启动时添加到插件容器中

pluginElement

由一个 List 结构存储项目中全部拦截器, 通过 Configuration#addInterceptor 方法添加

InterceptorChain

重点需要关注 Interceptor#pluginAll 中 plugin 方法, Interceptor 只是一个接口, plugin 方法只能由其实现类完成

ExamplePlugin

Plugin 可以理解为是一个工具类, Plugin#wrap 返回的是一个动态代理类

wrap

这里使用一个测试的 Demo 看一下方法运行时的参数

AlwaysMapPlugin

虽然是随便写的 Demo, 但是与正式使用的插件并无实际区别

插件运行状态

猜你喜欢

转载自blog.csdn.net/qq_37781649/article/details/108393365