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;