了解事务
我们一般说的事务是来源于关系数据库,当有数据持久化需求时一般都需要事务控制。
关系数据库:支持事务控制,mysql数据库存储引擎为InnoDB支持事务,存储引擎为MyIsam不支持事务。
jdbc:支持事务控制,设置CommitAuto(false)
Hibernate:支持事务,使用session.beginTransaction(),再session.getTransaction().commit()提交事务
spring如果控制事务:由于使用hibernate,spring对Hibernate中session进行管理,支持事务。
HibenateTemplate
spring针对持久层框架提供了模板类封装数据库操作方法:
1、可以简化数据访问的开发
2、支持事务控制,spring对Hibernate中session进行管理
spring提供了很多模板:
1、JdbcTemplate,针对jdbc操作数据库模板,相当于DbUtil
2、HibernateTemplate,针对Hibernate操作数据库模板。
加入jar
spring-orm-4.2.4.RELEASE.jar:spring针对orm框架整合包
spring-tx-4.2.4.RELEASE.jar:spring提供事务管理的包
spring-jdbc-4.2.4.RELEASE.jar:spring提供jdbc操作方法包,此包为事务控制的基础包
测试HibenateTemplate
dao实现类继承HibenrateDaoSupport(选择hibernate对应版本)
public class CustomerTestDaoImpl extends HibernateDaoSupport implements CustomerTestDao {
@Override
public CstCustomer findCustomerById(Long custId) {
return this.getHibernateTemplate().get(CstCustomer.class, custId);
}
@Override
public void insert(CstCustomer cstCustomer) {
this.getHibernateTemplate().save(cstCustomer);
}
}
直接运行报错:
‘sessionFactory’ or ‘hibernateTemplate’ is required
由于dao继承HibernateDaoSupport运行需要‘sessionFactory’或‘hibernateTemplate’。
解决:
将’sessionFactory’ or ‘hibernateTemplate’注入到dao中。
<!-- 加载db.properties配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- -->
<bean id="customerTestDao" class="cn.itcast.crm.dao.impl.CustomerTestDaoImpl">
<property