MyBatis实现与插件开发

Posted 勿忘初心,进无止境.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis实现与插件开发相关的知识,希望对你有一定的参考价值。

分析源码之前也需要源码下载并安装到本地仓库和开发工具中,方便给代码添加注释;安装过程和mybatis源码的安装过程是一样的,这里就不再重复描述了;下载地址:https://github.com/mybatis/spring

  1、SqlSessionFactoryBean源码分析

  2、MapperFactoryBean源码分析

  3、MapperScannerConfigurer源码分析

 

插件开发原理

插件是用来改变或者扩展mybatis的原有的功能,mybaits的插件就是通过继承Interceptor拦截器实现的;

在没有完全理解插件之前禁止使用插件对mybaits进行扩展,又可能会导致严重的问题;

mybatis中能使用插件进行拦截的接口和方法如下:

  Executor(update、query 、 flushStatment 、 commit 、 rollback 、 getTransaction 、 close 、 isClose)

  StatementHandler(prepare 、 paramterize 、 batch 、 update 、 query)

  ParameterHandler( getParameterObject 、 setParameters )

  ResultSetHandler( handleResultSets 、 handleCursorResultSets 、 handleOutputParameters )

插件开发快速入门

定义一个阈值,当查询操作运行时间超过这个阈值记录日志供运维人员定位慢查询,插件实现步骤:

  1、实现Interceptor接口方法

  2、确定拦截的签名

  3、在配置文件中配置插件

  4、运行测试用例

源码分析之责任链模式

责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作;和装饰器模式不同,每个节点都知道后继者是谁;适合为完成同一个请求需要多个处理类的场景;

 

 

 

要素分析

  Handler:定义了一个处理请求的标准接口;

  ConcreteHandler:具体的处理者,处理它负责的部分,根据业务可以结束处理流程,也可以将请求转发给它的后继者;

  client :发送者,发起请求的客户端;  

责任链模式优点:

   降低耦合度。它将请求的发送者和接收者解耦。

  简化了对象。使得对象不需要知道链的结构。

  增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。

  增加新的请求处理类很方便。

 

mybatis插件模块源码分析

  插件的初始化 (XMLConfigBuilder.pluginElement)

  插件的加载 (Configuration.new*方法,四大对象的创建)

  插件的调用 (Plugin. wrap、 Plugin. invoke)

 

mybatis插件理解:

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/Interceptor.md

 

Mybatis分页插件PageHelper

  

分页插件的使用;

  中文文档:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md

  使用手册:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

 

分页插件的注意事项;

  注意事项:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/Important.md

 

分页插件的源码概述;

 

自己实现mybatis

MyBatis核心流程三大阶段

 

 

初始化阶段

读取XML配置文件和数据库配置文件中的信息加载到configuration对象中;

 

 

SqlSession示意图

 

 

话说SqlSession

Sqlsession意味着创建数据库会话,代表了一次与数据库的连接;

   是MyBatis对外提供数据访问的主要API(试试iBatis编程的方式吧);

   实际上Sqlsession的功能都是基于Excutor来实现的;

 

SqlSession查询接口嵌套关系:

 

 

为什么要有代理阶段?

 

 

 

 
Executor组件分析

Executor是MyBaits核心接口之一,定义了数据库操作最基本的方法; Executor对数据库的操作遵循什么样规范?

 

 

简化版MyBatis实现思路

 

 

 

以上是关于MyBatis实现与插件开发的主要内容,如果未能解决你的问题,请参考以下文章

#私藏项目实操分享# Mybatis自定义拦截器与插件开发

内卷严重,不懂MyBatis插件开发怎么行,教你实现MyBatis分页插件

深入理解Mybatis插件开发

MyBatis分页插件实现

深入浅出MyBatis:MyBatis插件及开发过程

MyBatis 源码分析 - 插件机制