Poseidon(MyBatis)源码分析(1-整体架构分析)


1.为什么选择 MyBatis?
    简单:虽然各大数据库厂商提供给了 java 开发者一个数据库操驱动,却未提供给 java 开发者一个
              简单高效的数据映射工具,这样开发者不得不频繁处理繁琐的连接获取->Statement创建->
              Sql执行 ->结果集构建等工作,本来开发者的重点应该是开发代码实现业务逻辑,却不得不花费这些无
              意义的时间来处理这些工作。在此情况下,一些ORM映射工具应运而生,像著名的Hibernate、
              Ibatis、MyBatis,以及Spring Jdbc,但是 Hibernate 虽然支持丰富的对象映射以及对象语意
              的 HQL 查询语法,但 Hibernate 配置上,学习成本上还是较大的(关键是许多丰富的功能在
              我们的应用中有些显得富余了),而MyBatis、Ibatis这样一种 ORM 映射框架更是贴切原始 
              JDBC 的操作一些,将 SQL 代码通过配置的方式与 java 代码隔离开,个人认为这一点较其他的
              ORM框架都好:SQL 语句出现在 java 代码中是一件非常糟糕的是。
    高效:MyBatis框架使用原生的 SQL,没有像 Hibernate 那样将 HQL 编译成 SQL 语句然后再执行,
               这一点在效率上也是胜过 Hibernate 的,这也是许多网站、以及互联网公司系统在数据层一般
               不会采用 Hibernate 的原因,Hibernate 固然强大,它对效率与速度要求不是很高的 J2EE 企
               业级系统应用还是很广泛的

接下来就是对 MyBatis 框架的架构思路、源码等进行一个简要的剖析:

com.hundsun.poseidon
    ├─building
    ├─builder   //用于框架解析及初始化,1. 环境配置初始化;2. Mapper 文件的 Statement 解析初始化
    ├─cache //MyBatis 缓存框架,实现各种缓存
    ├─config  //定义各种 enum 类型,如 ExecutorType(执行器类型); ParameterMode(sql删除类型,
                        OUT or IN);   StatementType(select or insert...)
    ├─datasource//数据源管理,连接池管理
     ├─exceptions// MyBatis 异常定义
    ├─executor//执行器,在 MyBatis 中处于核心地位,这个模块囊括了一次数据库操作请求的参数处理
                         、SQL执行、执行结果映射构建
    ├─jdbc//提供一套 java 代码对 SQL 语法拼装框架,算是一种 java 语意对 SQL 语言的转换
    ├─logging//MyBatis 日志框架,1. 对 log4j 日志的封装;2. 对 jdklog 的日志封装;3. 使用动态代理
                         对 Connection,ResultSet 进行日志输出
    ├─mapping //映射定义:1. SQL 片段 =>BoundSql; 2. 环境配置 => Environment;3. <select>
                         标签 => MappedStatement实例;  4. 参数映射      (ParameterMap);5. 结果映射
    │                     (ResultMap)
    ─matadata//数据库元数据在 java 的抽象 1. 列抽象=>Column;2.表抽象=>Table;
                         3.数据库抽象=>DataBase
    ─ognl//OGNL表达式,在 Mybatis 中动态语言的支持默认选用 OGNL,不过该表达式的缺陷是效
                         率不高;优点是表达式功能丰富
    ─parsing//解析根据包;1.XNode、XPath解析工具,都是对 XML 文档的解析;2.SQL 占位符解析
                         ,SQL 中的属性表达式解析
    ─plugin//Mybatis提供给开发者的拦截器插件,使用动态代理实现,以提供非代码侵入式地增强
                          Mybatis 框架某些类功能
    ─reflection//反射工具,用于构建框架中定义的 Class,并预装配、缓存 Class 的成员变量、方法
                         ,利用反射实现数据与 JavaBean 之间的
                            自动映射
    ─session//数据操作会话,对于使用者,这里面的 SqlSession 是最常用到的。SqlSession 提供一
                         套完整的数据操作接口,    其默认实现是 DefaultSqlSession
    ─transaction//Mybatis 框架事务实现。一种是 JdbcTransaction,实现了数据库层的所有 
                         Connection 的事务动作;一种是对外开放的  ManagedTransaction,有使用者指定
                         事务管理类,这个事务管理类中并没有实现     Connection 的事务动作
     └─ type//声明了一系列处理 java 类型与数据库类型的处理类
 


int a = 0;







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值