Mybatis源码学习之路一

一、前言

  1. 工作三年了,各种开发框架也用的十分熟练。现在学习的时候渐渐也不满足使用上,所以开始涉猎源码,也是希望自己的技术能力能更近一步,自己想法也是从Mybatis框架源码开始,在博客上记录下,和大家一步进步

二、ORM框架

  1. 传统JDBC常见的步骤:
    1. 注册数据库驱动类
    2. 通过DriverManager打开数据库连接
    3. 通过连接创建相应的Statement
    4. 通过Statement执行相应的SQL语句,若是查询语句则得到ResultSet
    5. 通过ResultSet读取数据,并转化为相应的JavaBean
    6. 关闭资源
  2. 上述操作中我们关注点只有SQL语句的执行,其它操作重复且繁杂。早期的时候为了提高代码的可复用性,通常将重复性代码封装到一个类似DBUtils的工具类中。但是关系模型到对象模型的转换依然复杂,所以ORM框架应运而生
  3. ORM的提供的功能:
    1. 根据映射配置文件,实现对象模型和关系模型之间的映射,同时也屏蔽了上述重复代码
  4. Hibernate:
    1. 通过hbm.xml文件维护对象模型和关系模型之间的映射。通过该映射,开发人员可以通过看待Java的角度去看待数据库中的数据行
    2. 优点:
      1. HIbernate还能够屏蔽数据库的底层差异,以至于可以切换不同的数据库而程序不受影响。
      2. API没有侵入性,业务逻辑不需要继承Hibernate的任何接口
    3. 缺点
      1. 并不是数据库中所有的概念在面向对象的世界中都能找到对应关系,比如索引、存储过程以及函数等
      2. SQL优化比较困难
         
  5. Spring JDBC:
    1. 并不算一个ORM框架,仅仅使用模板方法的设计模式对原生JDBC进行了一层薄封装,它没有映射文件、缓存等概念,而是直接执行原生SQL语句
    2. 优点:
      1. 屏蔽了数据库连接创建等重复性代码,提升了开发效率
      2. 提供了很多template类,可以将对象中的属性映射为SQL中的参数
      3. 提供了很多ORM化的callback,可以将ResultSet转化成相应的对象列表
      4. Spring JDBC本身就位于核心包中,和Spring框架无缝连接
  6. Mybatis:
    1. Mybatis是对JDBC的一层封装,帮助开发人员屏蔽了底层代码的重复性
    2. 优点:
      1. 相比于Hibernate更加轻量级,可控性也更高
      2. 可以进行SQL优化

三、Mybatis整体架构简述

  1. MyBatis整体架构分为三层:接口层、核心处理层、基础支持层
  2. 接口层:
    1. 核心是SqlSession接口,它暴露了Mybatis提供给开发人员的API,接口层在接收到相应的请求时,会调用核心处理层的相应模块来完成具体操作
  3. 核心处理层:
    1. 核心处理层实现了Mybatis核心处理流程,其中包括Mybatis的初始化以及完成一次数据库操作涉及的全部流程
    2. 组成:
      1. 配置解析,解析配置文件如核心配置文件解析成功后会生成Configuration对象
      2. SQL解析,用于解析动态SQL
      3. SQL执行,用于执行SQL,其涉及到多个模块Executor、ParameterHandler、StatementHandler以及ResultSetHandler
      4. 插件,可以通过添加自定义插件的方式对Mybatis进行扩展
         
  4. 基础支持层:
    1. 为核心处理层提供了良好的支持,并提供了可观的代码复用
    2. 组成:
      1. 反射模块,对JDK反射的封装
      2. 类型转换模块,别名机制是类型转换模块中重要机制,实现了JDBC类型和JAVA类型之间的转换
      3. 日志模块,用于日志记录
      4. 资源加载模块,对类加载器的封装
      5. 解析器模块,一是对XPath的封装,为初始化加载解析配置文件提供支持。二是为处理动态SQL语句中的占位符提供支持
      6. 数据源模块,mybatis提供了相应的数据源实现,也提供了与第三方数据源集成的接口
      7. 事务管理模块,对数据库中的事务进行了抽象,其自身提供了相应的事务接口和简单实现。
      8. 缓存模块,提供了一级缓存二级缓存
      9. binding模块,将用户自定义的mapper接口与映射配置文件关联起来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值