分析源码之前也需要源码下载并安装到本地仓库和开发工具中,方便给代码添加注释;安装过程和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实现思路

转载于:https://www.cnblogs.com/Soy-technology/p/11495024.html

MyBatis实现与插件开发相关推荐

  1. Mybatis运行原理及源码解析

    Mybatis源码解析 一.前言 本文旨在mybatis源码解析,将整个mybatis运行原理讲解清楚,本文代码地址: https://github.com/lchpersonal/mybatis-l ...

  2. Mybatis源码分析(五)SqlSession的创建

    目录 一 SqlSession的创建 1.1 获取environments配置元素 1.2 获取事务工厂 1.3 获取执行器Executor 1.4 构建DefaultSqlSession 系列文章: ...

  3. 深入理解 Mybatis 插件开发

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:风一样的码农 cnblogs.com/chenpi/p/10 ...

  4. 都这么卷了,不懂MyBatis插件开发怎么行,教你实现一个MyBatis分页插件

    MyBatis可谓是Java开发工程师必须要掌握的持久层框架,它能够让我们更容易的通过Java代码操作数据库,并且它还有很高的扩展性,我们可以自定义插件,去让MyBatis的功能变的更为强大,本篇文章 ...

  5. MyBatis插件开发原理

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

  6. idea查看项目pid_intellij idea 插件开发--快速定位到mybatis mapper文件中的sql

    intellij idea 提供了openApi,通过openApi我们可以自己开发插件,提高工作效率.这边直接贴个链接,可以搭个入门的demo:http://www.jianshu.com/p/24 ...

  7. Mybatis插件开发(拦截SQL并改写SQL)

    文章目录 拦截器接口介绍 SQL拦截改写 定义拦截器接口 Interceptor 添加拦截器 关于我 拦截器接口介绍 Mybatis 允许在以映射SQL语句执行过程中的某一点进行拦截调用.默认情况下, ...

  8. 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    来自:Java建设者 初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.M ...

  9. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

最新文章

  1. 百万级访问量网站的技术准备工作[转帖]
  2. ElasticSearch集成SpringData史上最全查询教程
  3. 分辨出谁在浏览Youtube、土豆
  4. 如何利用计算机多核,如何利用多核电脑实现Matlab的并行运算
  5. 源代码管理分析工具 - Source Navigator
  6. 生信技能树课程记录笔记(六)20220530
  7. Excel 批量合并相同内容单元格方法
  8. PowerBI-时间智能函数-SAMEPERIODLASTYEAR
  9. c#启动时窗口默认光标聚焦位置设置
  10. 【小程序】小程序安卓,ios,ipad兼容问题
  11. frp 内网穿透 多系统 多模式(详细+多个应用)
  12. java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x0
  13. Mentor Graphics ModelSim SE 10.5官方原版+完美破解
  14. 高博14讲--第三讲 三维空间刚体运动
  15. Secure Boot Violation报错
  16. 2017 微信公开课PRO版 解读
  17. loj6539. 奇妙数论题
  18. 前亚马逊产品经理:TikTok的真正优势,并不是算法
  19. 如何在mac下查看JDK文档(附jdk1.8中文文档下载地址)
  20. Nokia 5110字模提取

热门文章

  1. SSH框架搭建 笔记 (含spring注解驱动)
  2. generator自动生成mybatis配置和类信息
  3. 经典HTML5学习资源
  4. 判断字符串是不是数字
  5. 软件工程师不可不知的10个概念
  6. php加密手机版_PHP解密支付宝小程序的加密数据、手机号的示例代码
  7. jsp超链接中怎么跳转页面跳转_JSP页面跳转方法小结
  8. 计算机的发展英语600词,急求一份有关计算机“存储器”的英语作文,600词左右可以多加分!...
  9. mfc清空数组_MFC数组的使用
  10. linux手动注入网络数据_记一次手动SQL注入