代码阅读_Spring的iBbatis支持
?
一、包结构package org.springframework.orm.ibatis;
?
Package providing integration of?iBATISDatabase Layer?withSpring concepts.
?
Interface Summary
SqlMapClientCallback
Callback interface for data access code that works with the iBATIS?SqlMapExecutor?interface.
SqlMapClientOperations
Interface that specifies a basic set of iBATIS SqlMapClient operations, implemented by?SqlMapClientTemplate.
?
Class Summary
SqlMapClientFactoryBean
FactoryBean?that creates an iBATIS?SqlMapClient.
SqlMapClientTemplate
Helper class that simplifies data access via the iBATIS?SqlMapClient?API, converting checked SQLExceptions into unchecked DataAccessExceptions, following the?org.springframework.dao?exception hierarchy.
Classes supporting the?org.springframework.orm.ibatis?package.
?
Class Summary
AbstractLobTypeHandler
Abstract base class for iBATIS TypeHandler implementations that map to LOBs.
BlobByteArrayTypeHandler
iBATIS TypeHandler implementation for byte arrays that get mapped to BLOBs.
BlobSerializableTypeHandler
iBATIS TypeHandler implementation for arbitrary objects that get serialized to BLOBs.
ClobStringTypeHandler
iBATIS TypeHandler implementation for Strings that get mapped to CLOBs.
SqlMapClientDaoSupport
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(SqlMapExecutorexecutor) 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
?
?
?
?