一、包结构
Spring的2.5版本关于iBatis只有两个包
package org.springframework.orm.ibatis;
package org.springframework.orm.ibatis.support;
API对这两个包的介绍如下
1. Package org.springframework.orm.ibatis
Package providing integration of iBATIS Database Layer with Spring concepts.
Interface Summary | |
Callback interface for data access code that works with the iBATIS SqlMapExecutor interface. | |
Interface that specifies a basic set of iBATIS SqlMapClient operations, implemented by SqlMapClientTemplate. |
Class Summary | |
FactoryBean that creates an iBATIS SqlMapClient. | |
Helper class that simplifies data access via the iBATIS SqlMapClient API, converting checked SQLExceptions into unchecked DataAccessExceptions, following the org.springframework.dao exception hierarchy. |
2.Package org.springframework.orm.ibatis.support
Classes supporting the org.springframework.orm.ibatis package.
Class Summary | |
Abstract base class for iBATIS TypeHandler implementations that map to LOBs. | |
iBATIS TypeHandler implementation for byte arrays that get mapped to BLOBs. | |
iBATIS TypeHandler implementation for arbitrary objects that get serialized to BLOBs. | |
iBATIS TypeHandler implementation for Strings that get mapped to CLOBs. | |
Convenient super class for iBATIS SqlMapClient data access objects. |
3. 包简单说明(中文版)
a)ibatis包提供Spring方式的iBatis封装
SqlMapClientCallback接口二次封装SqlMapExecutor
SqlMapClientOperations接口定义了SqlMapClient可进行的操作
SqlMapClientTemplate类简化SqlMapClient操作
SqlMapClientFactoryBean类提供生成SqlMapClient的工厂方法
b)ibatis.support包提供ibatis辅助类
AbstractLobTypeHandler类是LobHandler的基类
BlobByteArrayTypeHandler处理Blob
BlobSerializableTypeHandler处理Blob
ClobStringTypeHandler处理Clob
SqlMapClientDaoSupport通常作为开发者DAO基类
二、简要分析
1. 包下文件分析
##SqlMapClient
维护SqlMaps配置文件得到的sql伪脚本数据结构
(含数据库相关)
a)ibatis包
##SqlMapClientCallback
实现类处理自定义业务相关DAO处理(不负责数据库连接)
##SqlMapClientFactoryBean
提供生成SqlMapClient的工厂方法(从配置文件生成)
##SqlMapClientTemplate
分离SqlMapClient和业务DAO代码
简单来说就是分离取DB连接和基本操作(增删改查)
开发者一般调用这个
b)ibatis.support包
##XXXLobTypeHandler
处理Xlob
##SqlMapClientDaoSupport
对SqlMapClientTemplate封装
通常作为开发人员的DAO基类
2. 简单总结
a)关系分析
SqlMapClientFactoryBean可以生成SqlMapClient,
然后这个SqlMapClient通常放进SqlMapClientTemplate,
这个SqlMapClientTemplate一般再放入SqlMapClientDaoSupport作为开发人员的DAO基类。
b)开发人员关注点
DAO一般继承SqlMapClientDaoSupport,
然后从SqlMapClientDaoSupport取出SqlMapClient传伪SQL脚本ID即可操作数据库。
三、代码阅读笔记
##### org.springframework.orm.ibatis
##SqlMapClientCallback
回调(业务逻辑相关操作)(连接无关)
Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException;
##SqlMapClientOperations
常用操作行为(增删改查)
##SqlMapClientTemplate
预定义DAO方法(增删改查)
分离了数据库连接和数据库操作
核心方法是execute()(模板方法)(连接相关)
api式方法queryForXXX()(业务相关)(连接无关)(调用execute获取连接)
转换异常到Spring非受检异常
##SqlMapClientFactoryBean
负责建立SqlMapClient
afterPropertiesSet()负责建立SqlMapClient
辅助处理Ibatis配置文件加载
辅助处理数据连接(含事物)
##### org.springframework.orm.ibatis.support
注意此包和DefaultLobHandler及DefaultLobHandler$DefaultLobCreator有关联
DefaultLobHandler规范了Lob统一操作方式
##AbstractLobTypeHandler
提供存取Lob对象的模板方法
关键的setParameterInternal/getResultInternal子类负责
利用了LobHandler成员
LobCreatorSynchronization貌似处理Lob资源生成释放相关
##BlobByteArrayTypeHandler
实质是lobCreator.setBlobAsBytes/lobHandler.getBlobAsBytes
##BlobSerializableTypeHandler
实质是lobCreator.setBlobAsBytes/lobHandler.getBlobAsBytes
和ObjectInputStream/ObjectOutputStream相关的序列化处理
##ClobStringTypeHandler
实质是lobCreator.setBlobAsBytes/lobHandler.getBlobAsBytes
##SqlMapClientDaoSupport
支持SqlMapClientTemplate封装的SqlMapClientDao
可做DAO父类
貌似可享受SQLExceptionTranslator