你如果DAO继承至HibernateDaoSupport 那么就不能用jdbcTemplate
可以把jdbcTemplate的定义删掉了。即
<bean id="logDao" class="comtestbeansdaoimplDaoLogDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
如果要用jdbcTemplate ,那么你的DAO就得继承至 JdbcDaoSupport。配置按目前的就可以了,sessionFactory也不需要。
<beans>
<bean id="dataSource"
class="orgapachecommonsdbcpBasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>netsourceforgejtdsjdbcDriver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://127001:1433/Sample</value>
</property>
<property name="username">
<value>test</value>
</property>
<property name="password">
<value>baidu</value>
</property>
</bean>
<bean id="transactionManager"
class="orgspringframeworkjdbcdatasourceDataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="userDAO" class="netxiaxindaoUserDAO">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="transactionManager">
<ref local="transactionManager" />
</property>
</bean>
</beans>
配置中包含了三个节点:
Ø dataSource
这里我们采用了apache dhcp组件提供的DataSource实现,并为其配置了JDBC驱动、数据库URL、用户名和密码等参数。
Ø transactionManager
针对JDBC DataSource类型的数据源,我们选用了DataSourceTransactionManager
作为事务管理组件。
如果需要使用基于容器的数据源(JNDI),我们可以采用如下配置:
<bean id="dataSource"
class="orgspringframeworkjndiJndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/sample</value>
</property>
</bean>
<bean id="transactionManager"
class="orgspringframeworktransactionjtaJtaTransactionManager"/>
Ø userDAO
申明了一个UserDAO Bean,并为其指定了dataSource和
transactionManger资源。
UserDAO对应的代码如下:
public class UserDAO {
private DataSource dataSource;
private PlatformTransactionManager transactionManager;
public PlatformTransactionManager getTransactionManager() {
return transactionManager;
}
public void setTransactionManager(PlatformTransactionManager
transactionManager) {
thistransactionManager = transactionManager;
}
public DataSource executeTestSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
thisdataSource = dataSource;
}
public void insertUser() {
TransactionTemplate tt =new TransactionTemplate(getTransactionManager());
ttexecute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
JdbcTemplate jt = new JdbcTemplate(executeTestSource());
jtupdate(
"insert into users (username) values ('xiaxin');");
jtupdate(
"insert into users (id,username) values(2,
'erica');");
return null;
}
});
}
}
可以看到,在insertUser方法中,我们引入了一个新的模板类:orgspringframeworktransactionsupportTransactionTemplate。 TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及 *** 作成功后的事务提交。和JdbcTemplate一样,它使得我们无需在琐碎的try/catch/finally代码中徘徊。
在doInTransaction中进行的 *** 作,如果抛出未捕获异常将被自动回滚,如果成功执行,则将被自动提交。
这样可以吗
hql等查询方式不能满足性能或灵活性的要求,必须使用SQL时,大家有三种选择:
第一、使用Hibernate 的sql 查询函数,将查询结果对象转为Entity对象。
第二、使用Hibernate Session的getConnection 获得JDBC Connection,然后进行纯JDBC API *** 作;
第三、选择把Spring的JDBCTemplate作为一种很不错的JDBC Utils来使用。
JDBCTemplate的使用很简单,只要在ApplicationContext文件里定义一个jdbcTemplate节点,POJO获得注入后可以直接执行 *** 作,不需要继承什么基类,详见JDBCTemplate参考文档。
AplicationContext定义:
<bean id="jdbcTemplate" class="orgspringframeworkjdbccoreJdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
实际使用:
SqlRowSet rs = jdbcTemplatequeryForRowSet(sql, params);
按order by id desc limit 0,1进行一次数据查询,查询到的id即为你刚插入的数据id(此方法适用与单用户,多用户适用于楼上的LAST_INSERT_ID()方法)
以上就是关于Spring配置相关问题出错 请帮忙指点一下 谢谢了!全部的内容,包括:Spring配置相关问题出错 请帮忙指点一下 谢谢了!、JAVA jdbcTemplate更改数据库,如何创建新的连接,把值赋给jdbcTemplate。、spring 如何获取 jdbctemplate等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)