Mybatis拦截器失效

article/2025/10/1 8:11:11

现象:

自定义插件注册成功,但是始终不进入拦截器方法;
我的拦截器:
在这里插入图片描述
在这里插入图片描述

排查

Mybatis拦截器是采用的责任链模式,一般拦截器中intercept方法中最后执行 invocation.proceed() 方法,将拦截器责任链向后传递;

但是查看pageHelper源码可以发现,他的拦截器方法中并没有向后传递责任链,而是直接执行了另一个query方法:

  • com.github.pagehelper.PageInterceptor#intercept
    在这里插入图片描述

方案一

不管插件执行顺序,按规范文档来配置自定义插件即可:(即两个query方法都拦截)
在这里插入图片描述

方案二

想办法让自定义拦截器,在pageHelper拦截器之前执行,拦截第一个query方法:
(或者配置在pagehelper之后执行,拦截第二个query方法也是可以的);

所以需要使自定义拦截器在pagehelper之后添加;

  • 自定义插件配置类上添加注解: @AutoConfigureAfter({PageHelperAutoConfiguration.class})
@Configuration
@ConditionalOnBean({SqlSessionFactory.class})
@AutoConfigureAfter({PageHelperAutoConfiguration.class})  // 保证在分页插件之后加载
public class MybatisInterceptorConfig { …… }
  • 将该配置类设置为一个 auto-configuration 类
# 创建src/main/resources/META-INF/spring.factories,声明该配置类即可# spring.factories文件中  # 自定义配置类的全路径自己修改
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hx.springbootmybatis.order.mybatis.MybatisInterceptorConfig  

方案三

就是方案二括号中的方式:(或者配置在pagehelper之后执行,拦截第二个query方法也是可以的); 把方案二中的注解改一下:

@AutoConfigureBefore({PageHelperAutoConfiguration.class})  // 保证在分页插件之前加载

而且这样还可以捕获到分页语句构建之后的 sql 了!

补充

CachingExecutor中有2个query方法:
在这里插入图片描述

另外提一个问题:query方法中调用了同对象中的另一个query方法,会再次进入拦截器吗?
答案:不会
观察源码得知,mybatis拦截器的执行逻辑是这样的,所以更加肯定的得出结论:不会;
在这里插入图片描述

总结:

Mybatis 插件的执行顺序有两种:
1、不同拦截对象执行顺序,如下:Executor` -> `StatementHandler` -> `ParameterHandler` -> `ResultSetHandler
2、拦截相同对象执行顺序,取决于 mybatis-config.xml 中 <plugin> 配置顺序,越靠后,优先级越高。
3、拦截相同对象执行顺序,如果是使用的配置类加载,则取决于配置类的加载顺序,加载顺序,越靠后,优先级越高;

参考链接:

1、http://xtong.tech/2018/08/01/MyBatis%E6%8B%A6%E6%88%AA%E5%99%A8%E5%9B%A0pagehelper%E8%80%8C%E5%A4%B1%E6%95%88%E7%9A%84%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/

2、https://zhuanlan.zhihu.com/p/266735787
3、QueryInterceptor 规范



http://chatgpt.dhexx.cn/article/oq2Ao2e5.shtml

相关文章

MyBatis拦截器实现原理

Mybatis拦截器并不是每个对象里面的方法都可以被拦截的。Mybatis拦截器只能拦截Executor、StatementHandler、ParameterHandler、ResultSetHandler四个类里面的方法&#xff0c;这四个对象在创建的时候才会创建代理。 用途&#xff1a;实际工作中&#xff0c;可以使用Mybatis拦…

自定义MyBatis拦截器

文章目录 自定义MyBatis拦截器作用MyBatis中的四大核心对象在mybatis中可被拦截的类型有四种(按照拦截顺序)拦截器需要实现Mybatis提供的Interceptor接口利用反射获取运行中的实体字段的名字利用反射动态的为sql语句传递新参数使用mybatis自定义的拦截器为插入&#xff0c;更新…

Mybatis拦截器的使用及其源码详解

Mybatis拦截器的使用及其源码详解 Mybatis相关全览一、简介执行与添加顺序拦截器生效入口 二、使用例子 三、原理加载入口生成代理遍历拦截器匹配&生成代理 四、实践例子 本文用的是3.5.10版本 源码地址&#xff1a;https://github.com/mybatis/mybatis-3/releases 文档地址…

Mybatis拦截器Interceptor

前言 最近项目使用Mybatis拦截器对数据进行加解密&#xff0c;以下记录如何将拦截器集成到项目中以及在使用过程中踩过的一些小坑&#xff0c;与君共勉 1.Myabtis拦截器是什么&#xff1f; MyBatis允许使用者在映射语句执行过程中的某一些指定的节点进行拦截调用&#xff0c…

Springboot 自定义mybatis 拦截器,实现我们要的扩展

前言 相信大家对拦截器并不陌生&#xff0c;对mybatis也不陌生。 有用过pagehelper的&#xff0c;那么对mybatis拦截器也不陌生了&#xff0c;按照使用的规则触发sql拦截&#xff0c;帮我们自动添加分页参数 。 那么今天&#xff0c;我们的实践 自定义mybatis拦截器也是如此&a…

mybatis 拦截器

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Mybatis——拦截器Interceptor

本篇介绍Mybatis拦截器/插件相关知识&#xff0c;包括相关的类及作用、拦截器有哪几种、拦截器可以在Mybatis的执行过程中的哪些节点起作用、拦截器如何使用、相关的API&#xff0c;最后附上代码示例。 1. Mybatis拦截器是什么&#xff1f;一般用途&#xff1f; MyBatis允许使…

vue后台管理框架(iview + vue)

iview官网&#xff1a;https://www.iviewui.com/docs/introduce vueiview后台管理文档&#xff1a;https://lison16.github.io/iview-admin-doc/#/ vueiview后台管理线上示例&#xff1a;https://admin.iviewui.com/login vueiview后台管理github&#xff1a;https://github.co…

基于ThinkPHP6+Layui的后台管理框架

项目介绍 一款 PHP 语言基于 ThinkPhp6.x、Layui、MySQL等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架&#xff0c;可用于快速搭建前后端分离后台管理系统&#xff0c;本着简化开发、提升开发效率的初衷&#xff0c;框架自研了一套个性化的组件&am…

Quickadmin:基于ThinkPhp6+Vue+ElementUI后台管理框架

Quickadmin&#xff1a;基于ThinkPhp6VueElementUI后台管理框架 简介 QuickAdmin 是一款基于ThinkPHP 6.x&#xff0c;ElementUI&&Vue 2.x前后端分离后台管理框架&#xff0c;通过框架自带的在线代码生成器&#xff0c;可以轻松的实现后台管理的curd&#xff08;增删…

后台管理怎样用html实现,后台管理实现

京淘后台管理实现 1.1 商品列表展现 1.1.1 商品POJO对象 1.1.2 表格数据页面结构 1.1.3 请求URL地址 说明&#xff1a;如果采用UI框架并且添加了分页插件&#xff0c;则会自动的形成如下的URL请求地址 1.1.4 编辑ItemController 1.1.5 编辑ItemService 1.1.6 编辑ItemMapper 手…

【React项目架构 】+后台管理系统cms实操

React项目架构 一、 react脚手架 (一) 、yarn 安装 (二) 、react安装 npx create-react-app [-g] npm i react17.0.0 react-dom17.0.0 babel-standalone6.26.0 npm i react-router-dom npm i redux4.1.1 --save npm i redux-thunk2.4.1 npm i redux-persist npm install an…

Python实现的一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台,不用配置各种运行环境

Mini Admin 完整代码下载地址&#xff1a;Python实现的一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台 Mini Admin,一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台 &#x1f680; 应用场景&#xff1a;2-5人的管理团队&#xff0c;需要管理的资源数…

vue——后台管理系统框架

效果图 代码: <template><el-container class="box-el-container"><el-aside class="box-el-aside" :style="{width:isCollapse?60px:200px}"><el-col :span="12" class="el-menu-aside"><!…

基于ThinkPHP6+Layui通用后台管理框架

项目介绍 一款 PHP 语言基于 ThinkPhp6.x、Layui、MySQL等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架&#xff0c;可用于快速搭建前后端分离后台管理系统&#xff0c;本着简化开发、提升开发效率的初衷&#xff0c;框架自研了一套个性化的组件&am…

Rust学习指南(一)安装RUST后台管理框架

Windows安装 Rust安装非常简单&#xff0c;只要将Visual Studio的 Visual Studio的构建工具或者Visual Stuido 2022的构件工具安装即可。当被问及要安装哪些内容时&#xff0c;请确保已选择 “C build tools”&#xff0c;并包括 Windows 10 SDK 和英文语言包。具体可以参考这个…

php是一种通用开源,caozha-admin(PHP网站后台管理框架)

caozha-admin 后台管理框架 1.7.2 caozha-admin是一个通用的PHP网站后台管理框架&#xff0c;基于开源的ThinkPHP开发&#xff0c;特点&#xff1a;易上手&#xff0c;零门槛&#xff0c;界面清爽极简&#xff0c;极便于二次开发。 基础功能 1、系统设置 2、管理员管理 3、权限…

移动端后台管理系统框架

创建此项目的初衷 目前移动端越来越重要&#xff0c;好多项目都从PC端转移到了移动端。 前一段给客户做了一个PC和M自适应的项目&#xff0c;用vue-element-admin框架&#xff0c;手机端也能用&#xff0c;但体验有点差&#xff0c;客户改了好多。本来是好意&#xff0c;客户只…

(若依)RuoYi后台管理框架前端

若依后台管理 官方网址 后台管理二开推荐 官网的源码地址可供下载前后端代码 最近进到公司后跟着团队接了两家公司的App一套的开发&#xff0c;到公司的第一天就是先配置开发环境 安装软件之类的 第二天 带着熟悉RuoYi框架 很巧带我的大哥和我是一个学校毕业的 是大师兄 若依…

后台管理系统框架bootstrap中文版

简介&#xff1a; 后台管理系统框架bootstrap中文版 网盘下载地址&#xff1a; http://kekewl.cc/8TLdhidu7gi0 图片&#xff1a;