分析源码之前也需要源码下载并安装到本地仓库和开发工具中,方便给代码添加注释;安装过程和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实现与插件开发的更多相关文章

  1. Spring Boot-整合Mybatis(五)

    原始的整合方式 1.添加依赖 <!--mybatis起步依赖--> <dependency> <groupId>org.mybatis.spring.boot< ...

  2. mybatis generator插件开发

    mybatis现在普遍使用的每一个人DAO框架.mybatis generator它可以基于数据库中的表结构,生成自己主动mybatis代码和配置文件,方便使用,当然,实际的使用过程中.generat ...

  3. 深入理解Mybatis插件开发

    背景 关于Mybatis插件,大部分人都知道,也都使用过,但很多时候,我们仅仅是停留在表面上,知道Mybatis插件可以在DAO层进行拦截,如打印执行的SQL语句日志,做一些权限控制,分页等功能:但对 ...

  4. Mybatis插件开发

    前面几篇文章介绍了Mybtis中四个重要的对象,其中提到它们都是在Configuration中被创建的,我们一起看一下创建四大对象的方法,代码如下所示: public ParameterHandler ...

  5. MyBatis 工作流程及插件开发

    1. MyBatis 框架分层架构 2. MyBatis 工作流程 获取 SqlSessionFactory 对象: 解析配置文件(全局映射,Sql映射文件)的每一个信息,并保存在Configurat ...

  6. 【Mybatis】MyBatis之插件开发(十)

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

  7. MyBatis加强(4)~mybatis 插件开发

    一.插件介绍[动态代理] 1.插件[动态代理]:mybatis 允许在已经映射的语句的执行过程的某个时机进行拦截增强的机制. 2.mybatis中的组件动态代理的运用: MyBatis 在四大组件对象 ...

  8. intellij idea 插件开发--快速定位到mybatis mapper文件中的sql

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

  9. MyBatis多租户隔离插件开发

    在SASS的大潮流下,相信依然存在很多使用一个数据库为多个租户提供服务的场景,这个情况下一般是多个租户共用同一套表通过sql语句级别来隔离不同租户的资源,比如设置一个租户标识字段,每次查询的时候在后面 ...

随机推荐

  1. 基于Socket访问西门子PLC系列教程(二)

    本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:[公众号dotNet工控上位机:thinger_swj] 基于Socket ...

  2. 2020重新出发,JAVA学前了解,Windosws常用快捷键

    前言:windows 常用快捷键 标准计算机键盘共104键,除了26个字母键.符号键.数字键外,剩下的都是一些功能键: 键盘功能键 常用功能键:Esc.Tab.Caps Lock.Shift.Ctrl ...

  3. C#LeetCode刷题-设计

    设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制   33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索 ...

  4. 虚拟化技术之kvm基础

    一.KVM简介 KVM的全称是kernel base virtual machine(基于内核的虚拟机)是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中. ...

  5. 【luogu1352】没有上司的舞会 - 树形DP

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  6. troubleshoot之:使用JFR分析性能问题

    目录 简介 GC性能事件 同步性能 IO性能 代码执行的性能 其他有用的event 简介 java程序的性能问题分析是一个很困难的问题.尤其是对于一个非常复杂的程序来说,分析起来更是头疼. 还好JVM ...

  7. mysql表中已有数据,为表新增一个自增id。

    第一步,在navicat中,例如表test新建查询,输入以下两行代码即可搞定. alter table test add id int; alter table `test` change id id ...

  8. hadoop2.6虚拟机安装

    Linux环境设置/*安装Hadoop集群时要确保以下几个方面1.本机与虚拟机之间是否可以通信(Ping).如果不行检查下面 1.1本机防火墙关闭(开启情况是本机可以ping虚拟机,虚拟机不能ping ...

  9. Mockito鸡尾酒第一杯 单测Mock

    鸡尾酒 Mockito是Java的单元测试Mock框架. 它的logo是一杯古巴最著名的鸡尾酒Mojito, Mojito鸡尾酒,源自古巴的哈瓦那,带有浓厚的加勒比海风情. 并不浓烈,但是喝一杯下去, ...

  10. Kubernetes 中 Informer 的使用

    原文链接:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247485580&idx=1&sn=7392dbadf ...