扩展Spring系列(2) ---Spring对各种数据访问框架的集成机制
来源:互联网 发布:外卖抢单软件 编辑:程序博客网 时间:2024/05/22 11:34
扩展Spring(2) ---Spring对各种数据访问框架的集成机制
何为数据框架集成。
数据访问框架原本好好的,Spring都干了什么呢?
一是用template类封装了数据框架那些资源获取和异常事务处理的废话代码,而且按照自己的意见给出一些增强函数。
二是将其纳入了Spring的声明式事务管理中。
对比Spring对Hibernate、JDBC的集成,还有Spring Modules对O/R Broker的集成,发现Spring的DAO框架主要有六个类:
1.Template
著名的Template类,用callback机制封装了除业务代码外的所有必要但废话的代码,重新封装了数据框架的API,并再附送一些增强版。
2.TransactionManager
实现PlatformTransactionManager接口,数据访问框架就能与Spring的事务机制(TransactionTemplate或AOP声明式事务)结合。
重要的类仅以上两个,以下的类都只有少量标准代码,完全可以忽略。
3.DAOSupport
实际DAO类的基类,负责保持template变量。如果你觉得它破坏了你的类层次结构,完全可以不用。
4.Accessor
template类的基类,defining common properties like DataSource and exception translator,也没大用。
5.Operations
template所实现的接口,定义template支持的数据访问函数和增强函数,template有多个实现时才有用。
6.Exception Translate的相关类和函数
异常翻译,Spring DAO很重视的一个功能。
Template类的代码
因为Hibernate本身很复杂,所以HibernateTemplate也不适合畏高晕车的人士如我观看。JDBC简单很多,但JDBCTemplate又忙着增强JDBC的功能,多出好多代码。所以我选O/R broker的集成代码来看,代码一共才280行。
注:如果不熟O/R broker,可以简单的认为broker=connection, executable = statement ,其余一切同Jdbc。
1.1主干函数 Execute(BrokerCallback action)
step1. 获得Connection-- connecton = datasource.getConn();
step2. 准备Statement -- statement = new Statement(connection);
step3. 执行Action的回调函数doInBroker(Statement)。这个doInBroker()方法由客户定义,会拿着传入的statement,执行种种操作。
1.2 template的API函数
虽然理论上大家可以直接使用execute(),在匿名内部类里调用数据访问框架的任何API。但java的匿名内部类不比闭包,代码难看无比,所以除了Robbin还没见到其他兄弟提倡直接用execute方法的。
因此,template也对数据框架的API进行了wrap,封装了用execute(StatementCallback action)来执行这些API的函数,如下段就是wrap 了O/R Broker的execute(String statementID.....)方法:
另外还提供一些增强型、便利型的API(如selectOne() ,selectMany()),在参数、返回值上极尽变化。
TransactionManager的代码
比较复杂,一下说不清。但JDBC的DatasourceTransactionManager和Hibernate的HibernateTransactionManager的代码都很相近,说明这个TransactionManager其实也比较固定埋头狂抄就是了。
有兴趣的同学,可以响应某大老号召,实现ofbiz与spring的集成:)
系列文章:
Spring 的微内核与FactoryBean扩展机制
扩展Spring(2)--Spring对各种数据访问框架的集成机制
何为数据框架集成。
数据访问框架原本好好的,Spring都干了什么呢?
一是用template类封装了数据框架那些资源获取和异常事务处理的废话代码,而且按照自己的意见给出一些增强函数。
二是将其纳入了Spring的声明式事务管理中。
对比Spring对Hibernate、JDBC的集成,还有Spring Modules对O/R Broker的集成,发现Spring的DAO框架主要有六个类:
1.Template
著名的Template类,用callback机制封装了除业务代码外的所有必要但废话的代码,重新封装了数据框架的API,并再附送一些增强版。
2.TransactionManager
实现PlatformTransactionManager接口,数据访问框架就能与Spring的事务机制(TransactionTemplate或AOP声明式事务)结合。
重要的类仅以上两个,以下的类都只有少量标准代码,完全可以忽略。
3.DAOSupport
实际DAO类的基类,负责保持template变量。如果你觉得它破坏了你的类层次结构,完全可以不用。
4.Accessor
template类的基类,defining common properties like DataSource and exception translator,也没大用。
5.Operations
template所实现的接口,定义template支持的数据访问函数和增强函数,template有多个实现时才有用。
6.Exception Translate的相关类和函数
异常翻译,Spring DAO很重视的一个功能。
Template类的代码
因为Hibernate本身很复杂,所以HibernateTemplate也不适合畏高晕车的人士如我观看。JDBC简单很多,但JDBCTemplate又忙着增强JDBC的功能,多出好多代码。所以我选O/R broker的集成代码来看,代码一共才280行。
注:如果不熟O/R broker,可以简单的认为broker=connection, executable = statement ,其余一切同Jdbc。
1.1主干函数 Execute(BrokerCallback action)
step1. 获得Connection-- connecton = datasource.getConn();
step2. 准备Statement -- statement = new Statement(connection);
step3. 执行Action的回调函数doInBroker(Statement)。这个doInBroker()方法由客户定义,会拿着传入的statement,执行种种操作。
try
{
action.doInBroker(statement );
}
catch()
{
//翻译异常
}
{
action.doInBroker(statement );
}
catch()
{
//翻译异常
}
1.2 template的API函数
虽然理论上大家可以直接使用execute(),在匿名内部类里调用数据访问框架的任何API。但java的匿名内部类不比闭包,代码难看无比,所以除了Robbin还没见到其他兄弟提倡直接用execute方法的。
因此,template也对数据框架的API进行了wrap,封装了用execute(StatementCallback action)来执行这些API的函数,如下段就是wrap 了O/R Broker的execute(String statementID.....)方法:
public int execute(final String statementID, final String[] paramNames, final Object[] values) throws DataAccessException {
return executeWithIntResult(new BrokerCallback() {
public Object doInBroker(Executable executable) throws BrokerException {
applyNamedParamsToExecutable(executable, paramNames, values);
return new Integer(executable.execute(statementID));
}
});
}
return executeWithIntResult(new BrokerCallback() {
public Object doInBroker(Executable executable) throws BrokerException {
applyNamedParamsToExecutable(executable, paramNames, values);
return new Integer(executable.execute(statementID));
}
});
}
另外还提供一些增强型、便利型的API(如selectOne() ,selectMany()),在参数、返回值上极尽变化。
TransactionManager的代码
比较复杂,一下说不清。但JDBC的DatasourceTransactionManager和Hibernate的HibernateTransactionManager的代码都很相近,说明这个TransactionManager其实也比较固定埋头狂抄就是了。
有兴趣的同学,可以响应某大老号召,实现ofbiz与spring的集成:)
系列文章:
Spring 的微内核与FactoryBean扩展机制
扩展Spring(2)--Spring对各种数据访问框架的集成机制
- 扩展Spring系列(2) ---Spring对各种数据访问框架的集成机制
- 扩展Spring系列(2) ---Spring对各种数据访问框架的集成机制
- 扩展Spring系列(2) ---Spring对各种数据访问框架的集成机制
- 框架对Spring的扩展
- 【涉足Spring系列之一】 数据访问框架
- spring的数据访问框架的原理
- 对Spring 数据访问的理解
- 总结-对各种开源框架的认识小结-spring
- Spring对MongoDB的简单集成及数据操作
- SPRING数据访问对象(DAO)框架入门
- SPRING数据访问对象(DAO)框架入门
- SPRING数据访问对象(DAO)框架入门
- SPRING数据访问对象(DAO)框架入门
- 对spring框架的理解
- 对Spring框架的理解
- 对Spring框架的理解
- Spring框架集成FreeMarker
- spring集成ORM框架
- Java 2 用户界面
- 正则表达式三方法
- 札记
- Spring 的微内核与FactoryBean扩展机制
- 工作中八大最易被淘汰的人[转]
- 扩展Spring系列(2) ---Spring对各种数据访问框架的集成机制
- 项目经理的职业特征及所需技能
- SimpleDateFormat 格式参数
- 简化Spring(1)--配置文件
- 简化Spring(2)--Model层
- 简化Spring(3)--Controller层
- 简化Spring(4)--View层
- 如何用正确的方法来写出质量好的软件的75条体会
- 中国联通WAP业务开发规范