深入分析iBatis框架之系统架构与映射原理

iBitis框架主要的类层次结构

iBatis框架主要完成以下两件事情:

  1. 根据JDBC规范建立与数据库的连接、
  2. 通过反射打通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框架的运行原理

主要执行步骤:

  1. iBatis工作环境的搭建,如:读取SqlMap配置文件,构建Statement对象集,创建SqlClient对象
  2. 创建SqlMapSession对象
  3. 从对象池里取出一个SessionScope对象
  4. 建立数据库连接
  5. 从对象池里取出一个RequestScope对象
  6. 执行SQL语句
  7. 映射Java对象参数到ParameterMap,映射数据库列名到ResultMap
  8. 归还RequestScope对象到对象池
  9. 释放数据库连接
  10. 归还SessionScope对象到对象池
  11. 销毁或者共享SqlMapSession对象

其中SqlMapSession对象的创建和释放根据不用的情况会有所不同,因为SqlMapSession负责创建数据库的连接,包括对事务的管理,iBatis既可以自己管理事务,也可以由外部管理,iBatis自己管理是通过共享SqlMapSession对象实现的,多个Statement执行时共享一个SqlMapSession实例,而且是线程安全的。如果是外部管理就要自己控制SqlMapSession对象的生命周期