论坛首页 Java企业应用论坛

commons dbutils 常用方法

浏览 11147 次
精华帖 (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源码...
0 请登录后投票
   发表时间:2010-06-26  
你说的很对。但我认为hack DBUtils没有必要,DBUtils和Spring可以一起使用。用DBUtils实现DAO,让Spring管理Datasource和transaction,把DBBase声明为Spring可管理的bean,把datasource注入到DBBase中。可能要用构造函数注入,因为需要在构造函数中创建QueryRunner。DBBase中所有包含数据库操作的函数都让它抛出Runtime Exception,或者直接借用Spring的DataAccessException。
0 请登录后投票
   发表时间: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保证其事务性。
0 请登录后投票
   发表时间:2010-06-29  
我不这么配置的。事务是在service层实现的,不是在DAO中实现。对service中的方法进行事务性声明,DataSource和DAO是普通的Spring Bean。
0 请登录后投票
   发表时间:2010-06-29  
这只是数据源的配置,没有把事务处理放进去,具体事务策略当然是留到service再处理,我只是想知道你使用DBUtils以后,数据源是怎么配的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics