广告
返回顶部
首页 > 资讯 > 精选 >mybatis拦截器及不生效如何解决
  • 879
分享到

mybatis拦截器及不生效如何解决

2023-07-05 22:07:39 879人浏览 安东尼
摘要

这篇“mybatis拦截器及不生效如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mybatis拦截器及不生效如何解决

这篇“mybatis拦截器及不生效如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mybatis拦截器及不生效如何解决”文章吧。

背景:

在一些需求下,使用拦截器会大大简化工作量也更加灵活:

  • 项目中,要更新数据表的审计字段,比如 create_time, creator, update_time, updator, 这些字段,如果每一个表对应的mapper 都去写一次,或每一个方法都去更新一下,这个工作量非常大并且不太友好,并且不够优雅。

  • 记录一些日志,比如执行sql时侯,要打印每一个sql执行了多久,那就要记录sql执行前的时间戳,执行后的时间戳,得到其执行时间,再打印。

  • 等等场景

在这些场景下,使用拦截器肯定会更加灵活且方法。

mybatis拦截器怎样做

  • 定义一个拦截器

  • 把这个拦截器交给spring容器管理

  • 如果项目里面使用了 com.GitHub.pagehelper.PageInterceptor 拦截器可能会无效,则需要再定义一个 MybatisInterceptorAutoConfiguration

根据以上三点,进行详细说明

定义一个拦截器

简单示意一下怎样写。。。具体业务肯定不止这样子的

一个拦截器,主要是实现 Interceptor 这个接口,实现这个接口下的三个方法。
然后在这个实现类加上 @Component 注解,就交给 spring容器管理了,所以1,2是一起的

import org.apache.ibatis.cache.CacheKey;import org.apache.ibatis.executor.Executor;import org.apache.ibatis.mapping.BoundSql;import org.apache.ibatis.mapping.MappedStatement;import org.apache.ibatis.plugin.Interceptor;import org.apache.ibatis.plugin.Intercepts;import org.apache.ibatis.plugin.Invocation;import org.apache.ibatis.plugin.Plugin;import org.apache.ibatis.plugin.Signature;import org.apache.ibatis.session.ResultHandler;import org.apache.ibatis.session.RowBounds;import org.springframework.stereotype.Component; import java.util.Properties; import lombok.extern.slf4j.Slf4j; @Slf4j@Component@Intercepts({        @Signature(                method = "query",                type = Executor.class,                args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}        ),        @Signature(                method = "query",                type = Executor.class,                args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}        ),        @Signature(                type = Executor.class,                method = "update",                args = {MappedStatement.class, Object.class}        )})public class LogInterceptor implements Interceptor {    @Override    public Object intercept(Invocation invocation) throws Throwable {        log.info("begin >>>>>>>>>");        Object rest = invocation.proceed();        log.info("end >>>>>>>>>");        return rest;    }     @Override    public Object plugin(Object o) {        return Plugin.wrap(o, this);    }     @Override    public void setProperties(Properties properties) {     }}

定义一个 MybatisInterceptorAutoConfiguration

为什么要有这么一个类呢,主要是因为如果你的模块里面引用了 com.github.pagehelper.PageInterceptor,你自定义的拦截器会无效,是因为mybatis的拦截器这就是一个责任链,但是如果执行了 PageInterceptor,这个Interceptor比较特别,它自己执行完,就不往下传递链条了,即这个链会在它这里断开。所以加了其它的interceptor, 它们必须在 PageInterceptor 之前执行。

具体可见代码:

import com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration; import org.apache.ibatis.session.SqlSessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.context.annotation.Configuration;  @Configuration// 这一行很重要,因为interceptor 链的执行与添加是反序的,所以在 PageHelperAutoConfiguration 之后添加,才能先执行。@AutoConfigureAfter(PageHelperAutoConfiguration.class)public class MybatisInterceptorAutoConfiguration {     @Autowired    private List<SqlSessionFactory> sqlSessionFactoryList;     @PostConstruct    public void addMyInterceptor() {        LogInterceptor e = new LogInterceptor();        for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {            sqlSessionFactory.getConfiguration().addInterceptor(e);        }    }}

以上就是关于“mybatis拦截器及不生效如何解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: mybatis拦截器及不生效如何解决

本文链接: https://www.lsjlt.com/news/355870.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis拦截器及不生效如何解决
    这篇“mybatis拦截器及不生效如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mybatis拦截器及不生效如何解决...
    99+
    2023-07-05
  • mybatis拦截器及不生效的解决方法
    目录背景:mybatis拦截器怎样做定义一个拦截器定义一个 MybatisInterceptorAutoConfiguration背景: 在一些需求下,使用拦截器会大大简化工作量也更...
    99+
    2023-05-14
    mybatis拦截器 mybatis拦截器不生效
  • spring boot中interceptor拦截器未生效的解决
    目录interceptor拦截器未生效开始用的spring boot版本为1.5.6解决方案HandlerInterceptor实现登录失效拦截等首先写一个实现HandlerInte...
    99+
    2022-11-12
  • springboot配置多数据源后mybatis拦截器失效的解决
    目录1. 解析配置文件初始化数据源2. 定义数据源枚举类型3. TheadLocal保存数据源类型4. 自定义sqlSessionProxy5. 自定义路由6. 定义切面,dao层定...
    99+
    2022-11-12
  • springboot Interceptor拦截器excludePathPatterns忽略失效如何解决
    这篇文章主要讲解了“springboot Interceptor拦截器excludePathPatterns忽略失效如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot...
    99+
    2023-06-20
  • 如何使用Java MyBatis拦截器提高工作效率
    小编给大家分享一下如何使用Java MyBatis拦截器提高工作效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景:在后端服务开发时,现在很流行的框...
    99+
    2023-06-29
  • 如何解决Mybatis-plus中@TableField不生效问题
    这篇文章主要介绍如何解决Mybatis-plus中@TableField不生效问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Mybatis-plus的坑@TableField不生效事件回归实体类定义字段中是带下划...
    99+
    2023-06-26
  • mybatis plus框架@TableField注解不生效问题及解决方案
    目录一、问题描述二、解决方案三、关于@TableField注解失效原因的思考四、Mapper接口LambdaQuery方法调用过程梳理1、Mapper接口调用实际上使用的是动态代理技...
    99+
    2022-11-13
  • Mybatis-plus查询条件为空不生效问题及解决
    目录查询条件为空不生效参数不生效查询条件为空不生效 -- mybatis-plus eq方法 default Children eq(R column, Object val) { ...
    99+
    2022-11-12
  • Mybatis插入语句默认值不生效的问题及解决
    目录Mybatis插入语句默认值不生效问题原因解决Mybatis-plus插入修改配置默认值创建 插入修改默认值设置方法指定字段Mybatis插入语句默认值不生效 问题 Mybati...
    99+
    2022-11-13
  • Mybatis插入语句默认值不生效如何解决
    今天小编给大家分享一下Mybatis插入语句默认值不生效如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybatis...
    99+
    2023-07-02
  • SpringBoot整合MyBatis-Plus乐观锁不生效的问题及解决方法
    目录SpringBoot整合Myabtis-Plus1、依赖导入2、数据库插入3、SpringBoot各个层次的操作3.1、实体类3.2、configuration3.2.1、Tab...
    99+
    2022-11-13
  • oracle触发器不生效如何解决
    如果Oracle触发器没有生效,可能有以下几个原因和解决方法:1. 触发器没有启用:确保触发器是启用状态。可以使用以下语句检查触发器...
    99+
    2023-09-29
    oracle
  • mysql my.ini不生效如何解决
    本篇内容主要讲解“mysql my.ini不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql my.ini不生...
    99+
    2023-02-14
    mysql my.ini
  • react+maxlength不生效如何解决
    本篇内容介绍了“react+maxlength不生效如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!react+maxlength不生...
    99+
    2023-07-04
  • 改css不生效如何解决
    这篇“改css不生效如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“改css不生效如何解决”文章吧。改css不生效的解...
    99+
    2023-07-05
  • linux php.ini不生效如何解决
    本篇内容主要讲解“linux php.ini不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux php.ini不生效如何解决”吧!linux php.ini不生效的解决办法:...
    99+
    2023-07-04
  • selenium drag_and_drop不生效如何解决
    本篇内容主要讲解“selenium drag_and_drop不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“selenium drag_and_dro...
    99+
    2023-07-05
  • jmeter cookie管理器不生效如何解决
    如果JMeter的Cookie管理器不生效,可以尝试以下解决方法:1. 确保Cookie管理器位于测试计划的正确位置。Cookie管...
    99+
    2023-08-30
    jmeter cookie
  • mybatis驼峰映射不起效如何解决
    如果mybatis的驼峰映射不起效,可能是因为以下原因:1. 配置文件中未开启驼峰命名规则:在mybatis配置文件(通常是`myb...
    99+
    2023-09-11
    mybatis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作