深入分析iBatis框架之系统架构与映射原理
深入分析iBatis框架之系统架构与映射原理
iBitis框架主要的类层次结构
iBatis框架主要完成以下两件事情:
- 根据JDBC规范建立与数据库的连接、
- 通过反射打通Java对象与数据库参数交互之间相互转化的关系
iBatis是一种典型的交互式框架,前期准备好交互的必要条件,然后构建一个交互的环境,在交互环境中还划分成会话,每次会话也有一个环境。当这些环境都准备好了之后,剩下的就是交换数据
iBatis框架的设计策略
方便的地写出SQL和方便地获取SQL的执行结果才是iBatis的核心竞争力
iBatis框架的一个重要组成部分就是其SqlMap配置文件,SqlMap配置文件的核心是Statement语句包括CRUD,iBatis通过解析SqlMap配置文件得到的所有Statement执行语句,同时会形成ParameterMap、ResultMap两个对象,用于处理参数和经过解析后交给数据库处理的SQL对象
数据映射的大致过程为:根据在Statement中定义的SQL语句,解析出其中的参数,按照其出现的顺序保存在Map集合中,并按照在Statement中定义的ParameterMap对象类型解析出参数的Java数据类型,根据其数据类型构建TypeHandler对象,参数值的复制是通过DateExchange对象完成的
iBatis框架的运行原理
主要执行步骤:
- iBatis工作环境的搭建,如:读取SqlMap配置文件,构建Statement对象集,创建SqlClient对象
- 创建SqlMapSession对象
- 从对象池里取出一个SessionScope对象
- 建立数据库连接
- 从对象池里取出一个RequestScope对象
- 执行SQL语句
- 映射Java对象参数到ParameterMap,映射数据库列名到ResultMap
- 归还RequestScope对象到对象池
- 释放数据库连接
- 归还SessionScope对象到对象池
- 销毁或者共享SqlMapSession对象
其中SqlMapSession对象的创建和释放根据不用的情况会有所不同,因为SqlMapSession负责创建数据库的连接,包括对事务的管理,iBatis既可以自己管理事务,也可以由外部管理,iBatis自己管理是通过共享SqlMapSession对象实现的,多个Statement执行时共享一个SqlMapSession实例,而且是线程安全的。如果是外部管理就要自己控制SqlMapSession对象的生命周期