spring管理hibernate的事务(声明注解实现)

1.hibernate执行过程:

1)应用程序先调用Configuration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactory对象

2)利用SessionFactory对象得到session对象,两种方式:getCurrentSession与 openSession()。

区别:

        1)getCurrentSession创建的session会和绑定到当前线程,openSession不会。

        2) getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,openSession必须手动关闭(session.close)。

        3) openSession()打开的是新的session,getCurrentSession会先从上下文找,有session就拿过来用,没有就创造新的session

3)session对象开启事务,得到一个事务对象:

Transaction tx= session.beginTransaction();

4)利用session对象的方法get load save delete操作pojo实体类

5)事务提交+session.close()+sessionfactory.close()


2.Spring中配置Hibernate事务的核心:

         1.配置SessionFactory

         2.配置事务容器

         3.配置事务规则

         4.配置事务入口

3.spring管理hibernate事务(注解实现):

其余实现方式:https://blog.csdn.net/zhangqindabendan/article/details/68961389

1)spring得到hibernate的SessionFactory的控制权。(spring配置文件中)2)然后,在配置文件中写入下面语句,打开注解功能(配置事务容器3)事务规则与事务接口:

@Transactional对类或者方法进行标记,如果标记到类上,那么此类中所有方法都进行开启事务以及事务回滚处理,在类中定义Transactional的时候,它有propagation、rollbackFor、noRollbackFor等属性,此属性是用来定义事务规则,而定义到哪这个就是事务入口

eg:
service实现类上加上@Transactional,(事务规则使用默认的)。
dao层实现类上只需要得到session,并且利用session的方法操作pojo实体类了。不需要开启事务以及提交事务或者回滚事务了。
service实现类:

dao层实现类:

总结:使用spring来管理事务非常方便,可以将hibernate原来的复杂步骤简单化!我们来过一遍spring管理的hibernate事务的过程,再与上面讲的hibernate管理事务流程对比下!:

1)spring取得sessionFactory管理权

2)通过sessionFactory.getCurrentSession得到session。这样会自动关闭session。

3)在方法上加上@Transactional。这样方法在执行前会自动打开事务,在session操作完pojo实体类后,成功则会自动提交事务,失败则会自动回滚事务。
4)(关闭session,由于用的sessionFactory.getCurrentSession,会自动关闭)
5)(关闭sessionFactory,由spring自动管理

猜你喜欢

转载自blog.csdn.net/m0_37914211/article/details/80977920