在项目中,会出现一些对sql处理的需求,如果sql操作很多,为了简化处理,可以在sql执行的时候加入一个拦截器,并对将要执行的sql进行统一的处理。

mybatis拦截器

在以前一般都选用mybatis自带的一个拦截器叫做Interceptor接口实现,实现此接口重写里面的intercept方法对sql进行处理,但是需要在类上加入我们需要拦截的是查询还是更新的操作的注解,

如下:

@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}),@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),}
)

这种方式用起来比较麻烦,如今我们有更简单的方式,mybatis-plus在3.4.0以后提供了一个自己的拦截器InnerInterceptor,该拦截器的优势在于,它特别细粒度的为我们提供了更新和查询的拦截方法

mybatis-plus拦截器

        <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

mybatis-plus的拦截器提供了细粒度的方法,无需去判断查询或更新操作

public interface InnerInterceptor {/*** 判断是否执行 {@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;}/*** {@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}/*** 判断是否执行 {@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;}/*** {@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}/*** {@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}default void setProperties(Properties properties) {// do nothing}
}

加入自定义拦截器

@Configuration
public class CipherMybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 自定义拦截器,先添加先执行。interceptor.addInnerInterceptor(new LizzMybatisIntercepts());// 自带分页拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

MyBatis-plus拦截器相关推荐

  1. Mybatis Interceptor 拦截器原理 源码分析

    Mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最 ...

  2. mybatis使用拦截器显示sql,使用druid配置连接信息

    mybatis使用拦截器显示sql,使用druid配置连接信息 mybatis sql Druid 1.显示出sql内容: 新建2个类: MybatisInterceptor :拦截sql,并获得输出 ...

  3. Mybatis 通过拦截器动态修改SQL

    01 使用场景 当我们在多租户的项目中,编写SQL语句都要带上tenant字段,用于区分不同的租户只能操作自己的数据. 比如,像下面的SQL select * from member where id ...

  4. mybatis 自定义拦截器

    拦截器注解 mybatis自定义拦截器实现步骤: 实现org.apache.ibatis.plugin.Interceptor接口. 添加拦截器注解org.apache.ibatis.plugin.I ...

  5. 一步步教你mybatis分页,mybatis分页拦截器 使用,mybatis拦截器分页

              mybatis 分页详解.mybatis分页查询,mybatis分页拦截器使用.struts2下mybatis分页 mybatis默认是支持分页的,内部通过创建可滚动的Result ...

  6. 如何使用Mybatis的拦截器实现数据加密与解密

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转载自公众号:日拱一兵 关注我,回复口令获取可获取独家整理的学习资料: - 001 :领取<Sp ...

  7. Mybatis SQL拦截器实现

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文原文阅读:https:/ ...

  8. MyBatis框架 拦截器简单使用

    Interceptor 是MyBatis提供的一个插件(plugin扩展).代表拦截器,可以拦截代码中的数据库访问操作,即Statement操作 拦截后,可以去修改正在执行的SQL语句,可以额外访问数 ...

  9. Mybatis Interceptor 拦截器

    拦截器(Interceptor)在 Mybatis 中被当做插件(plugin)对待,官方文档提供了 Executor(拦截执行器的方法),ParameterHandler(拦截参数的处理),Resu ...

  10. mybatis redis_基于人事年假管理的系统springboot+mybatis+redis+拦截器

    那么分享一个项目案例篇吧! 需求是:假设有一个部门表,一个员工表,一个年假表, 员工表里: 部门表: 休假表: 管理员表     项目原型: 效果图: 管理员登录: 登录成功回调: 进入后台首页,这里 ...

最新文章

  1. 如何在Windows Server 2008 Core里面添加Role~~~
  2. 5G NPN 行业专网 — 媒体行业 5G 专网部署方案
  3. 为什么每个邮件收到后都会有一个htm的附件_Python 发送邮件各种姿势
  4. 前端(四)——CSS之导入方式、各类选择器
  5. Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中)
  6. python输入和输出的区别_python2和python3的输入和输出区别介绍
  7. 4.1_ 1_ 初识文件管理
  8. 面试官 | 为什么用了索引之后,查询就会变快?
  9. 句句真研—每日长难句打卡Day9
  10. WIN7下安装IIS
  11. Html5实现的语音搜索功能
  12. win10下安装Debain Linux子系统
  13. Android刘海屏、水滴屏全面屏适配详解,997页字节跳动Android面试真题解析火爆全网
  14. 没有人会告诉你的小技巧,自学视频剪辑第一步要做什么?
  15. 任意模数NTT(学习笔记)
  16. 华为2288H v5服务器配置JBOD(硬盘直通)
  17. 如何使用Delphi 10 Seattle的Android应用做Intent的发送和接收
  18. py系统学习笔记:第七阶段:网页编程基础:第二章:CSS3:23.文本、表格属性
  19. 《基于Java的网上购物系统的设计与开发》 硕士论文
  20. 【C#】十大排序算法(动图演示+代码实现)

热门文章

  1. 如何查看内核版本和ubuntu版本
  2. Java的学习道路(一)
  3. Linux环境C语言开发基础
  4. java从入门到精通----OOP 2
  5. java pdf 修改内容_Java PDFBox – 读取和修改带有特殊字符的pdf(变音符号)
  6. 简单的解决textarea文本框内容换行,对应到页面的内容也换行的问题
  7. Windows消息响应机制之四:PostQuitMessage和GetMessage函数
  8. java 交流群 14187321 欢迎java爱好者参与
  9. php 复制文件夹并压缩到最小_php获取所有文件并压缩
  10. Ghost for Linux 出色的硬盘对拷工具(转)