锁定老帖子 主题:commons dbutils 常用方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-24
wnick 写道 chenkan2000 写道 BeanPropertyRowMapper和ParameterizedBeanPropertyRowMapper可以实现BeanListHandler一样的功能,也是一行代码。我并不是要说明spring JDBC比DBUtils功能强大,但事务、数据库连接池真的需要好好考虑的。
我没有别的意思 只是我网上查了一下感觉都比较麻烦 所以希望找一个简短点的 呵呵 我稍微看了一下源代码,Spring和DbUtils在基本查询和处理结果集方面的设计思想是一致的。DBUtils只提供了一个QueryRunner,确实够轻量级,数据源也可以使用开源的连接池,但事务确实不好控制。 在单个数据源的情况下要准确的控制事务的提交回滚,必须保证在一个事务中的操作都使用同一个Connection。在Spring中通过对DataSource进行代理,返回与当前执行线程绑定的Connection,以此来保证上面所说的这一点。使用DBUtils实现事务,不知是否需要hack源码... |
|
返回顶楼 | |
发表时间:2010-06-26
你说的很对。但我认为hack DBUtils没有必要,DBUtils和Spring可以一起使用。用DBUtils实现DAO,让Spring管理Datasource和transaction,把DBBase声明为Spring可管理的bean,把datasource注入到DBBase中。可能要用构造函数注入,因为需要在构造函数中创建QueryRunner。DBBase中所有包含数据库操作的函数都让它抛出Runtime Exception,或者直接借用Spring的DataAccessException。
|
|
返回顶楼 | |
发表时间:2010-06-27
chenkan2000 写道 你说的很对。但我认为hack DBUtils没有必要,DBUtils和Spring可以一起使用。用DBUtils实现DAO,让Spring管理Datasource和transaction,把DBBase声明为Spring可管理的bean,把datasource注入到DBBase中。可能要用构造函数注入,因为需要在构造函数中创建QueryRunner。DBBase中所有包含数据库操作的函数都让它抛出Runtime Exception,或者直接借用Spring的DataAccessException。
有道理,修改DBUtils确实不是好办法。 不过DataSource应该使用Spring的一个DataSource代理TransactionAwareDataSourceProxy <bean id="dataSourceTarget" class="org.apache.commons.dbcp.BasicDataSource" scope="singleton"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@localhost:1521:dbname</value> </property> <property name="username"> <value>user_bask_app</value> </property> <property name="password"> <value>user_bask_app</value> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy" scope="singleton"> <constructor-arg> <ref bean="dataSourceTarget"/> </constructor-arg> </bean> <bean id="runner" class="org.apache.commons.dbutils.QueryRunner"> <constructor-arg> <ref bean="dataSource"/> </constructor-arg> </bean> QueryRunner从代理中取得Connection,在同一个请求线程中由Spring保证其事务性。 |
|
返回顶楼 | |
发表时间:2010-06-29
我不这么配置的。事务是在service层实现的,不是在DAO中实现。对service中的方法进行事务性声明,DataSource和DAO是普通的Spring Bean。
|
|
返回顶楼 | |
发表时间:2010-06-29
这只是数据源的配置,没有把事务处理放进去,具体事务策略当然是留到service再处理,我只是想知道你使用DBUtils以后,数据源是怎么配的。
|
|
返回顶楼 | |