Mybatis-Plus扩展接口InnerInterceptor

devtools/2025/1/16 2:54:25/

InnerInterceptor 接口就是 MyBatis-Plus 提供的一个拦截器接口,用于实现一些常用的 SQL 处理逻辑,处理 MyBatis-Plus 的特定功能,例如PaginationInnerInterceptor、OptimisticLockerInnerInterceptor 等,都实现了 InnerInterceptor 接口,并添加了各自特定的功能。

java">public interface InnerInterceptor {/*** 当执行查询操作时,MyBatis 会调用该方法,判断是否需要执行查询操作。默认返回true,表示继续执行查询操作,* 如果需要阻止查询操作,则可以在实现该方法时返回false。** 判断是否执行 {@link Executor#query(MappedStatement, Object, RowBounds, ResultHandler, CacheKey, BoundSql)}* <p>* 如果不执行query操作,则返回 {@link Collections#emptyList()}** @param executor      Executor(可能是代理对象)* @param ms            MappedStatement* @param parameter     parameter* @param rowBounds     rowBounds* @param resultHandler resultHandler* @param boundSql      boundSql* @return 新的 boundSql*/default boolean willDoQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {return true;}/*** 在执行查询操作之前,MyBatis 会调用该方法。通过实现该方法,可以在查询之前进行一些必要的操作,例如设置数据范围、修改 SQL 等。** {@link Executor#query(MappedStatement, Object, RowBounds, ResultHandler, CacheKey, BoundSql)} 操作前置处理* <p>* 改改sql啥的** @param executor      Executor(可能是代理对象)* @param ms            MappedStatement* @param parameter     parameter* @param rowBounds     rowBounds* @param resultHandler resultHandler* @param boundSql      boundSql*/default void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {// do nothing}/*** 当执行更新操作时,MyBatis 会调用该方法,判断是否需要执行更新操作。默认返回true,表示继续执行更新操作,* 如果需要阻止更新操作,则可以在实现该方法时返回false。** 判断是否执行 {@link Executor#update(MappedStatement, Object)}* <p>* 如果不执行update操作,则影响行数的值为 -1** @param executor  Executor(可能是代理对象)* @param ms        MappedStatement* @param parameter parameter*/default boolean willDoUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {return true;}/*** 在执行更新操作之前,MyBatis 会调用该方法。通过实现该方法,可以在更新之前进行一些必要的操作,例如设置更新时间、加密数据等。** {@link Executor#update(MappedStatement, Object)} 操作前置处理* <p>* 改改sql啥的** @param executor  Executor(可能是代理对象)* @param ms        MappedStatement* @param parameter parameter*/default void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {// do nothing}/*** 在执行 SQL 之前,MyBatis 会调用该方法。通过实现该方法,可以在 SQL 执行之前进行一些必要的操作,例如设置事务隔离级别、设置查询超时时间等。* * {@link StatementHandler#prepare(Connection, Integer)} 操作前置处理* <p>* 改改sql啥的** @param sh                 StatementHandler(可能是代理对象)* @param connection         Connection* @param transactionTimeout transactionTimeout*/default void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {// do nothing}/*** 在获取 BoundSql 对象之前,MyBatis 会调用该方法。通过实现该方法,可以在获取 BoundSql 对象之前进行一些必要的操作,例如设置参数、修改 SQL 等。** {@link StatementHandler#getBoundSql()} 操作前置处理* <p>* 只有 {@link BatchExecutor} 和 {@link ReuseExecutor} 才会调用到这个方法** @param sh StatementHandler(可能是代理对象)*/default void beforeGetBoundSql(StatementHandler sh) {// do nothing}/*** 设置拦截器属性。该方法在创建拦截器实例时调用,用于设置拦截器的属性。*/default void setProperties(Properties properties) {// do nothing}

应用案例:

Mybatis-Plus分页拦截器

Mybatis-Plus乐观锁拦截器

拦截器生效配置:

java">@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();// 乐观锁mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());// 分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}
}

参考资料:

mybatisPlus的InnerInterceptor接口讲解-CSDN博客


http://www.ppmy.cn/devtools/26514.html

相关文章

Flutter运行项目一直:running gradle task

大体原因就是访问国外的资源由于网络等原因导致访问失败&#xff0c;解决方法就是换成国内的源 修改项目的android/build.gradle 文件&#xff0c;将里面的 google() mavenCentral()替换为 maven {allowInsecureProtocol trueurl https://maven.aliyun.com/repository/googl…

React 之 如何启动一个新的项目(六)

React本身是为构建SPA&#xff08;单页面应用&#xff09;而设计的。 想完全用 React 构建一个新的应用或网站&#xff0c;我们建议选择社区中流行的、由 React 驱动的框架。 生产级的 React 框架 1. Next.js Next.js 的页面路由 是一个全栈的 React 框架。它用途广泛&#x…

K8S学习

组件理解&#xff1a; c-m: 决策者 api-server: 接口/信息交互中心&#xff08;秘书&#xff09; scheduler: 计算节点资源,任务调度 &#xff08;会计师&#xff09; ETCD: 存储数据 &#xff08;资料档案室&#xff09; node: 服务器 &#xff08;工厂&#xff09; k…

手写一个uart协议——rs232(未完)

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1波形设计 本篇内容&#xff1a; 一、RS232的回环测试 上位机由串口助手通过 rx 线往 FPGA 发 8 比特数据&a…

保姆级教程:实现在mac电脑上获取windows电脑分享的网络文件夹

演示系统&#xff1a;win10 Sonoma 14.4.3 限制条件&#xff1a;两台设备需要在同一局域网内&#xff0c;即同一网络环境。 —————————————————————————————————— 第一步&#xff1a;打开控制面板 -> 找到网络和共享中心 -> 选择更改…

共享旅游卡项目如何做线上运营?分享运营的3个核心点!

疫情三年下来&#xff0c;还能保持活跃的实体行业&#xff0c;可能就是旅游行业。别看很多美食餐饮的&#xff0c;看起来很赚钱&#xff0c;除开成本&#xff0c;其实也是赚点辛苦钱。 从2023年疫情放开&#xff0c;很多人都涌入到旅游行业。但因为绝大多数都是门外汉&#xf…

图像处理ASIC设计方法 笔记18 轮廓跟踪算法的硬件加速方案

目录 1排除伪孤立点&#xff08;断裂链表&#xff09;方法1 限制链表的长度方法2 增加判断条件排除断裂链表方法3 排除不必要跟踪的轮廓&#xff08;推荐用这个方法&#xff09; P129 轮廓跟踪算法的硬件加速方案 1排除伪孤立点&#xff08;断裂链表&#xff09; 如果图像中某…

如何在iPhone上恢复出厂设置后恢复数据

你不想让这种情况发生&#xff0c;但它确实发生了。您必须将iPhone恢复出厂设置。当您的 iPhone 上出现软件问题且无法修复时&#xff0c;可能会发生这种情况。相反&#xff0c;在更新期间&#xff0c;或者您的iPhone遇到问题时&#xff0c;iPhone上的数据不再存在。 不过不用…