【Mybatis源码学习】概述

  • 1.怎样下载源码
    • 1.1 下载地址
    • 1.2 导入Idea
      • 1.2.1 环境
      • 1.2.2 部署与打包
  • 2.源码架构
    • 2.1 核心流程三大阶段
      • 2.1.1 初始化
      • 2.1.2 代理
      • 2.1.3 数据读写
    • 2.2 面向对象设计遵循的七大设计原则
      • 2.2.1 单一职责
      • 2.2.2 合成复用原则

最近复习享学课堂lison大佬讲解的mybatis源码,深有感触。在此记一笔,遗留青史。

1.怎样下载源码

1.1 下载地址

源码下载地址为:https://github.com/MyBatis/MyBatis-3,本学习笔记以3.5.x的版本进行解读和笔记,是对当前学习课程的总结,也是对以后进行复习打下参考的基础以及提供优化空间的前提。

1.2 导入Idea

1.2.1 环境

maven: 3.5.3
jdk: 1.8.0_191
idea: 2019.3

1.2.2 部署与打包

1)将pom文件中所有的true,全部改为 false;
2)在当前工程目录下执行以下命令:mvn install -DskipTests 或 mvn install -Dmaven.test.skip=true
3)若其他demo需要运用当前mybatis,记得对应上版本号,方便调试。

2.源码架构

  1. API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。面向SQLSession编程。

  2. 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

  3. 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

2.1 核心流程三大阶段

2.1.1 初始化

读取XML配置文件和注解中的配置信息,创建配置对象(MappedStatement对象,包括了传入参数映射配置、执行的SQL语句、结果映射配置,存储在内存中),并完成各个模块的初始化的工作。这里面有很多工厂模式、建造者模式的身影。

2.1.2 代理

调用Mybatis提供的API,封装iBatis的编程模型,使用mapper接口开发的初始化工作。

2.1.3 数据读写

通过SqlSession完成SQL的解析,参数的映射、SQL的执行、结果的解析过程:
A) 根据SQL的ID查找对应的MappedStatement对象。
B) 根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
C) 获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
D) 根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
E) 释放连接资源。

2.2 面向对象设计遵循的七大设计原则

设计原则名称 定 义 使用频率
单一职责原则(Single Responsibility Principle, SRP) 一个类只负责一个功能领域中的相应职责 ★★★★☆
开闭原则(Open-Closed Principle, OCP) 软件实体应对扩展开放,而对修改关闭 ★★★★★
里氏代换原则(Liskov Substitution Principle, LSP) 所有引用基类对象的地方能够透明地使用其子类的对象 ★★★★★
依赖倒转原则(Dependence Inversion Principle, DIP) 抽象不应该依赖于细节,细节应该依赖于抽象 ★★★★★
接口隔离原则(Interface Segregation Principle, ISP) 使用多个专门的接口,而不使用单一的总接口 ★★☆☆☆
合成复用原则(Composite Reuse Principle, CRP) 尽量使用对象组合,而不是继承来达到复用的目的 ★★★★☆
迪米特法则(Law of Demeter, LoD) 一个软件实体应当尽可能少地与其他实体发生相互作用 ★★★☆☆

2.2.1 单一职责

XMLConfigBuilder:主要负责解析mybatis-config.xml。
XMLMapperBuilder: 主要负责解析映射配置文件,包括*mapper.java,*mapper.xml;
XMLStatementBuilder: 主要负责解析映射配置文件中的SQL节点,*mapper.xml,包括select, update, insert, delete这些标签的解析;.
另外还有重要的应用:Sqlsession

2.2.2 合成复用原则

XMLMapperBuilder和XMLStatementBuilder都有一个“秘书”:MapperBuilderAssistant,组合使用。

【Mybatis源码学习】概述相关推荐

  1. Mybatis源码学习-动态代理

    Mybatis源码学习-动态代理 binding包下面是mybatis的mapper动态代理 // Mybatis官方手册建议通过mapper对象访问mybatis,因为使用mapper看起来更优雅 ...

  2. 【博学谷学习记录】超强总结,用心分享 | 架构师 Mybatis源码学习总结

    Mybatis源码学习 文章目录 Mybatis源码学习 一.Mybatis架构设计 二.源码剖析 1.如何解析的全局配置文件 解析配置文件源码流程 2.如何解析的映射配置文件 Select inse ...

  3. Mybatis源码学习(三)SqlSession详解

    前言 上一章节我们学习了SqlSessionFactory的源码,SqlSessionFactory中的方法都是围绕着SqlSession来的.,那么SqlSession又是什么东东呢?这一章节我们就 ...

  4. MyBatis源码学习笔记(从设计模式看源码)

    文章目录 1.源码分析概述 ①.Mybatis架构分析 ②.门面模式 ③.设计模式的原则 2.日志模块分析 ①.适配器模型 ②.动态代理 ③.日志模块分析 3.数据源模块分析 ①.工厂模式 ②.数据源 ...

  5. mybatis源码学习1--学习源码的目的

    在开始分析mybatis源码之前,需要定一个目标,也就是我们不是为了读源码而去读,一定是带着问题去读,在读的时候去寻找到答案,然后再读码的同时整理总结,学习一些高级的编码方式和技巧. 首先我们知道my ...

  6. Mybatis源码学习笔记之Mybatis二级缓存

    简介   Mybatis一级缓存是会话级的缓存,而二级缓存则是应用级别的缓存,默认关闭,二级缓存使用不慎可能会导致脏读. 开启方式(SpringBoot+Mybatis)   application. ...

  7. mybatis源码学习篇之——执行流程分析

    前言 在正式学习mybatis框架源码之前,需要先弄懂几个问题?myabtis框架是什么?为什么需要mybatis框架?使用mybatis框架带来的好处是什么? 回答这几个问题之前,我们先来看一下,之 ...

  8. Mybatis源码学习-MapperMethod

    MapperMethod是代理方式的实际执行类,JDK动态代理调用的invoke方法,实际是转发到了MapperMethod的execute方法,参考源码如下: public Object invok ...

  9. Mybatis源码学习二(一级缓存)

    一级缓存流程 一级缓存有效的因素 一级缓存有效测试 public class User {private Integer id;private String name;public Integer g ...

最新文章

  1. 各色“独特的”数据中心安置法,藏太深了!
  2. ssl提高组周一备考赛【2018.10.29】
  3. 使用交叉存取得到更快推荐算法
  4. Serial Port接收数据完整性要求
  5. Q115:Linux系统下CodeBlocks对PBRT-V3进行编译和调试
  6. 局域网从另一台电脑copy文件(Linux系统下)
  7. c#入门经典第6版pdf百度云盘_C#入门经典第6版中文pdf_NET教程
  8. 武汉公积金新政10日起实行 四种算法取最低值(zz)
  9. 业务流程图有哪些?一篇文章带你了解和绘制业务流程图
  10. finecms相关信息-随时更新
  11. java403forbidden_Spring Cloud出现Options Forbidden 403问题解决方法
  12. DeepBrain Chain 深脑链——将区块链与AI相结合的前沿科技
  13. sip测试工具--Sipp的编译
  14. SpringBoot控制台打印SQL
  15. BIM模型文件下载——某联排别墅项目Revit模型
  16. Pyqt关闭并打开新窗口的实现
  17. wap.php,wap.php
  18. word打字自动删除后面的字的原因
  19. 高频电容的阻抗频率曲线
  20. 144 SSM与SSH

热门文章

  1. 实验组和对照组的样本量一定要“均衡”才行?
  2. vue 学习 - 收藏集 - 掘金
  3. 绘画软件兼容性测试,功能测试-兼容性测试
  4. 加油,CMSP!写在Bespin Global乔迁之喜
  5. html顺序进场动画,十六种炫酷纯css加载动画(一)
  6. 【练手项目】用Python写了一个水果忍者小游戏
  7. 广西科技大学c语言期末答案,广西科技大学C语言程序设计试题
  8. CC00073.kafka——|Hadoopkafka.V58|——|kafka.v58|稳定性|事务操作|
  9. QTableWidget编辑单元格内容,按下回车键使焦点转到下一个单元格
  10. 中小企业如何借力工业互联网抵抗死亡潮?