Spring,Hibernate,Mybatis,JDBC事务之间的的关系
2015-03-25 11:32
585 查看
由于项目中既用到了Hibernate,又用到了Mybatis,还用到了JdbcTemplate,比较纠结于他们的事务,抽了个时间好好研究了下,有理解不正确的地方,欢迎批评指正
大致的来说,事务可以分为以下2中:
1.JDBC的事务
2.JTA,容器的事务
由于不涉及到JTA,就不谈JTA的事务了
TransactionManager用的是HibernateTransactionManager,大概配置如下:
?
配置的事务是在service.impl层的,配置大概如下
?
这样的话只能在service.impl层拿到HibernateSession,如果在其它层调用会发生找不到session的异常,以上都比较好理解
问题是,现在在service.impl层又用到了Mybatis,还有JdbcTemplate,那么他们的事务怎么处理的?和hibernate的又有什么关系?
经试验发现Mybatis和JdbcTemplate的事务也是受spring管控的,就是说如果调用2个更新数据库的方法,第二个方法出异常了,则第一个方法也会回滚,之前还担心不能回滚的疑虑就消除了,可以放心大胆的使用Mybatis和JdbcTemplate了,因为他们都是用的JDBC的事务,所以只有他们的数据源是一样的就可以让spring来管理事务
后来又做了个实验
不在service.impl层调用Mybatis的方法和JdbcTemplate的方也法是可以的,但是没有事务,即如果调用2个更新数据库的方法,第二个方法出异常了,则第一个方法是不会回滚的
--------------------------------------------------------------分割线
又做了个实验,换了下transactionManager,配置如下:
?
即没有用HibernateTransactionManager,发现对于JdbcTemplate的事务和以前一样,即如果在service.impl层是受spring管控事务的,但是对于Hibernate,会出现拿不到session的异常,所以最佳实践还是用
HibernateTransactionManager
大致的来说,事务可以分为以下2中:
1.JDBC的事务
2.JTA,容器的事务
由于不涉及到JTA,就不谈JTA的事务了
TransactionManager用的是HibernateTransactionManager,大概配置如下:
?
?
问题是,现在在service.impl层又用到了Mybatis,还有JdbcTemplate,那么他们的事务怎么处理的?和hibernate的又有什么关系?
经试验发现Mybatis和JdbcTemplate的事务也是受spring管控的,就是说如果调用2个更新数据库的方法,第二个方法出异常了,则第一个方法也会回滚,之前还担心不能回滚的疑虑就消除了,可以放心大胆的使用Mybatis和JdbcTemplate了,因为他们都是用的JDBC的事务,所以只有他们的数据源是一样的就可以让spring来管理事务
后来又做了个实验
不在service.impl层调用Mybatis的方法和JdbcTemplate的方也法是可以的,但是没有事务,即如果调用2个更新数据库的方法,第二个方法出异常了,则第一个方法是不会回滚的
--------------------------------------------------------------分割线
又做了个实验,换了下transactionManager,配置如下:
?
HibernateTransactionManager
相关文章推荐
- jdbc、jdbcTemplate、hibernate、jpa、spring之间的关系
- spring 同时配置hibernate and jdbc 事务
- hibernate,spring管理事务中(transaction,JDBC connection,Hibernate Session的使用)
- 备忘:spring jdbc事务代码 mybatis, nhibernate
- Spring、Struts、Hibernate框架之间的关系是什么以及怎么处理
- struts+spring+hibernate之间的关系与差别 (转)
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- [置顶] SPRING ,HIBERNATE,MYBATIS重构系统(带spring事务测试及spring Restful测试)
- 在Spring整合Hibernate的框架中,HibernateTemplate、SessionFactory和Session之间是怎样的关系?
- structs spring hibernate 三者之间有什么关系?
- springMVC+hibernate+jdbc+mybatis整合 支持全注解方式 支持全配置方式
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- proxool连接池配置说明(与jdbc、Hibernate、Spring之间的配置)
- spring 中 Hibernate 事务和JDBC事务嵌套问题
- 事务(JDBC、Hibernate、Spring)
- hibernate,spring,struts三个框架之间的关系
- Mybatis,Springjdbc,Hibernate ,JDBC的多表映射学习比较
- spring 同时配置hibernate and jdbc 事务
- spring04 数据库操作 spring+jdbc/hibernate 及其声明式事务处理
- Struts2,Hibernate和Spring之间的框架整合关系