mybatis拦截器不生效_自动助力器失效是什么原因

mybatis拦截器不生效_自动助力器失效是什么原因现象:自定义插件注册成功,但是始终不进入拦截器方法;排查Mybatis拦截器是采用的责任链模式,一般拦截器中intercept方法中最后执行invocation.proceed()方法,将拦截器责任链向后传递;但是查看pageHelper源码可以发现,他的拦截器方法中并没有向后传递责任链,而是直接执行了查询:com.github.pagehelper.PageInterceptor#intercept思路想办法让自定义拦截器,在pageHelper拦截器之前执行;所以需要使自定义拦

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

现象:

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

排查

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 规范


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195510.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kafka安装

    kafka安装

    2020年11月19日
    210
  • 带通滤波器幅频特性曲线图_滤波器知识,你所要的,都在这里

    带通滤波器幅频特性曲线图_滤波器知识,你所要的,都在这里滤波器是一种选频装置,可以使信号中特定的频率成分通过,而极大地衰减其它频率成分。一、概述1、定义凡是可以使信号中特定的频率成分通过,而极大地衰减或抑制其他频率成分的装置或系统都称之为滤波器,相当于频率“筛子”。2、分类频率通带:能通过滤波器的频率范围。频率阻带:被滤波器抑制或极大地衰减的信号频率范围。截止频率:通带与阻带的交界点。2)按物理原理分:机械式、电路式;按处理信号分:模拟、数字3、滤波…

    2022年6月1日
    118
  • 六、策略模式—旅行的交通工具 #和设计模式一起旅行#[通俗易懂]

    兵无常势,水无常形,能因敌变化而取胜者,谓之神! ——《孙子兵法》故事背景旅行开始,我和设计模式mm要去的目的地很多,去往不同目的地可以选择的交通工具也是多样的,从北京到上海,我们可以选择自驾游、乘坐飞机、高铁,甚至是骑单车等等方式!每一种交通工具到达目的的时间也不同,假如从北京到上海,乘坐飞机两个小时,高铁五个小时,自驾游3天(3*24小时),每一种交通费也不一样!假…

    2022年2月27日
    44
  • vs code必备插件_手机flash player插件

    vs code必备插件_手机flash player插件基础必备插件:1、ViewInBrowser在浏览器里预览网页必备。2、vscode-icons改变编辑器里面的文件图标。个人比较稀饭这个,其他的你们可以自行选择。3、SublimeTextKeymapandSettingsImporter这个名字挺长,说白了就是sublime的快捷键插件。由于以前我是用sublime这款编辑器的,所以换成vscode之后没有su…

    2022年9月21日
    0
  • pycharm快速调整格式_pycharm自带python吗

    pycharm快速调整格式_pycharm自带python吗代码自动填充了空格问题在使用pycharm的代码编辑器时,常常懒得写空格,如下图,但这是不符合代码规范的,而且也会影响可读性。解决方法pycharm有自动调整代码格式的快捷键,默认为alt+ctrl+l,按下快捷键后,代码自动填充了空格。自动对齐代码问题在使用pycharm的代码编辑器时,有点时候copy的代码的没有按照代码格式对齐,如下图,但这是不符合代码规范的,而且也会影响可读性。解决方法py…

    2022年8月25日
    2
  • 情商的研究

    情商EQ认识与提高情商(情绪、意志、性格、行为习惯组成的商数)情商(EmotionalQuotient)通常是指情绪商数,简称EQ,主要是指人在情绪、意志、耐受挫折等方面的品质,其包括导商(LQ)等。总的来讲,人与人之间的情商并无明显的先天差别,更多与后天的培养息息相关。它是近年来心理学家们提出的与智商相对应的概念。从最简单的层次上下定义,提高情商是把不能控制情绪的部分变为可以…

    2022年4月9日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号