`

代码阅读_Spring的iBbatis支持

阅读更多

 

一、包结构

 

Spring2.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

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.

 

2Package org.springframework.orm.ibatis.support

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. 包简单说明(中文版)

 

aibatis包提供Spring方式的iBatis封装

 

SqlMapClientCallback接口二次封装SqlMapExecutor

SqlMapClientOperations接口定义了SqlMapClient可进行的操作

 

SqlMapClientTemplate简化SqlMapClient操作

SqlMapClientFactoryBean类提供生成SqlMapClient的工厂方法

 

bibatis.support包提供ibatis辅助类

 

AbstractLobTypeHandler类是LobHandler的基类

BlobByteArrayTypeHandler处理Blob

BlobSerializableTypeHandler处理Blob

ClobStringTypeHandler处理Clob

 

SqlMapClientDaoSupport通常作为开发者DAO基类

 

二、简要分析

 1. 包下文件分析

 

##SqlMapClient

维护SqlMaps配置文件得到的sql伪脚本数据结构

(含数据库相关)

 

 

aibatis

 

##SqlMapClientCallback

实现类处理自定义业务相关DAO处理(不负责数据库连接)

 

##SqlMapClientFactoryBean

提供生成SqlMapClient的工厂方法(从配置文件生成)

 

##SqlMapClientTemplate

分离SqlMapClient和业务DAO代码

简单来说就是分离取DB连接和基本操作(增删改查)

开发者一般调用这个

 

bibatis.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

 

注意此包和DefaultLobHandlerDefaultLobHandler$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

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics