该系列文章针对 Mybatis 3.5.1 版本

在 mybatis 中允许针对 SQL 在执行前后进行扩展操作,而这些扩展操作也叫做插件。

在 Mybaits 中允许用插件来拦截的方法包括:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

实现一个 plugin 的 步骤如下

step1、插件实现类实现了 Interceptor 接口

step2、通过注解 @Intercepts 指定了该插件需要拦截的对象

step3、mybatis-config.xml 中的 <plugins> 下配置插

自定义简易 SQL 打印插件

简易 SQL 打印插件,忽略细节

思路

SQL 在 Mybatis 启动完成后已经被加载到了 Configuration 对象中,所以无论是 ExecutorParameterHandlerResultSetHandlerStatementHandler 哪一种情况下的拦截,只要持有了Configuration 对象也就相当于有了执行 SQL,而SQL 参数也是一样的,而在 Mybatis 运行期间 Configuration 对象会伴随整个执行流程,包括 ExecutorParameterHandlerResultSetHandlerStatementHandler 等环节。

在 Mybatis 中执行的处理流程无论是需要参数处理或者结果集处理,最后所有的方法都会经由 Executor 所有,只需要拦截 Executor 对象即可。

针对 SQL 的打印,及其结果打印,只针对增删改查方法,而在 Executor 中,增删改由 Executor#update 完成,查则由 Executor#query 实现。

所以针对 SQL 的打印只需要拦截 Executor#updateExecutor#query方法即可

代码实现

step1、创建插件类 PrintSqlPlugin 并实现 Interceptor 接口

step2、追加注解 @Intercepts 指定拦截对象

方法都有重载的方法,需要指定多个特定的参数来特指特定的方法,这里为演示案例不写全

step 1、和step 2 实现后的代码结构如下:
代码实现如下:

Interceptor#interceptor部分代码如下:

主体执行逻辑(具体实现不展开)

  • 1、获取执行 SQL。(如:select * from user_info where id = ?
  • 2、获取执行 SQL 对应的参数。(如:param1 = 1)
  • 3、将SQL 对照对应的参数进行拼接,并打印相关SQL数据。(如:select * from user_info where id = 1)
  • 4、调用原有对象 target 执行sql查询,并获得结果集
  • 5、打印结果数据

step3、在 mybatis-config.xml 中配置

测试,控制台打印日志如下

idea打印sql的插件_[Mybatis]-[基础支持层]-插件-自定义简易SQL打印插件相关推荐

  1. sql server解析xml属性为表格_[Mybatis][基础支持层]mapper xml sql 解析

    该系列文章针对 Mybatis 3.5.1 版本 Mybatis 中 标签解析,主要是为了得到两大部分数据 1.Mapper.class 接口 2.SQL 执行语句,结果集映射关系等数据 在上一章中提 ...

  2. 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解

    该系列文章针对 Mybatis 3.5.1 版本 在上一篇文章中,谈到了 <environment> 标签解析会构建 Environment 对象,Environment 对象中有两个关键 ...

  3. mybatis plugins_[Mybatis]-[基础支持层]-插件-plugin标签解析

    该系列文章针对 Mybatis 3.5.1 版本 一.Mybatis 插件的作用 Mybatis 针对 SQL 映射语句执行过程中进行拦截处理,而对应的拦截器 Mybaits 又称之为 插件(这些插件 ...

  4. MyBatis 架构分层与模块划分-基础支持层

    最后一个就是基础支持层.基础支持层主要是一些抽取出来的通用的功能(实现复用),用来支持核心处理层的功能.比如数据源.缓存.日志.xml 解析.反射.IO.事务等等这些功能. 这个就是MyBatis 的 ...

  5. python怎么和sql一起用_自己写的Python数据库连接类和sql语句拼接方法

    这个工具类十分简单和简洁. sql拼接方法 # encoding=utf-8 from django.http import HttpResponse from anyjson import seri ...

  6. access 打印预览 代码_如何在亚银标签纸上批量打印条形码

    亚银标签纸上批量打印条形码的方法和用普通不干胶标签纸打印条形码的方法基本上是一样的,再具体批量打印条形码的过程中有两点非常重要:一是要有一台能支持亚银标签纸的条码打印机,二就是需要一款专业的条码打印软 ...

  7. 定位插件_谷歌官方发布了一款全新超实用Chrome插件,支持国内使用!

    近期,谷歌官方开发并上架Chrome商店一款网页锚文本分享工具:Link to Text Fragment插件.它可以将网页文本以url的形式分享出去,当访问者打开这个url时,能够直接在该网页上定位 ...

  8. openmvide使用需要什么插件_在Django中使用Webpack:再也不需要插件了!

    这篇文章将会学习如何在Django中以最小的代价安装Webpack.这个问题常规的解决办法是使用django-webpack-loader,但是在我看来这种方式代价太大.这篇文章的目的是提供一个在Dj ...

  9. 前端打印样式乱了_皮具大百科之皮料上的3D打印,连花的阴影都能完美复刻!超美工艺...

    打印即可呈现皮雕独特的华丽纹样.印花工具的使用方法不是只有一种.改变敲打方式或倾斜角度,也可以描绘出其他各式各样的花样.印花不只可以垂直打印,也有斜向打印,连续打印等技法.而打印时的力道也会影响印花的 ...

最新文章

  1. 深圳、长沙高校排名飙升,清北坐实亚洲大学Top2,留学深造还去啥新港日| 泰晤士2020亚洲大学榜...
  2. PHP - 会话控制
  3. Linux中的Interrupted system call错误
  4. 不能头脑一热,就布局颠覆性技术、上马未来产业
  5. 保留小数点后三位_【Meta分析】Stata制作森林图时,如何保留三位小数?
  6. AspectJ声明式事务配置
  7. 计算机网络第4版潘爱民_王道考研 计算机网络(2)学习笔记
  8. 如何使用Xcode7免费真机调试
  9. 最新!华为HCIA网络工程师题库精讲(01)
  10. C语言知识点思维导图
  11. 通读SLA文档之后的感受
  12. Android实现推送PushService通知Notification
  13. 干货丨Kubernetes 中分析调试网络流量的4种方法
  14. Unity AreaLight使用
  15. 妹子图APP(一)—— Retrofit+Glide+Gson加载网络图片
  16. 汉字 计算机 坟墓,墓的拼音_墓组词_墓意思(解释)-常用汉字大全
  17. 使用KCP 加速游戏消息,让全球玩家流畅联网
  18. 简单的电商分销管理系统介绍
  19. 【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)
  20. 使用RFID定位技术的AGV巡检机器人如何工作?

热门文章

  1. Python之父推荐!《Python 3网络爬虫开发实战》第二版!文末送签名版!
  2. Angular 服务器端渲染的一个错误消息 - No provider for InjectionToken REQUEST
  3. SAP Spartacus 中的 HTML 标签
  4. Angular应用从Component到Html的数据绑定是如何实现的 -数据流的讨论
  5. 通过一个实际例子理解Angular rxjs Observable的异步行为
  6. Angular HTTPClient的使用方法
  7. JavaScript ES6对Proxy的原生支持的一个例子
  8. 推荐一个好用的Chrome扩展,专门处理xml的,名叫XML Tree
  9. sap.ca.ui.model.format.NumberFormat format logic for Globalization
  10. SAP Cloud for Customer的Calculated field字段