spring事务管理1

spring事务管理1

ID:43190924

大小:1.94 MB

页数:41页

时间:2019-10-02

spring事务管理1_第1页
spring事务管理1_第2页
spring事务管理1_第3页
spring事务管理1_第4页
spring事务管理1_第5页
资源描述:

《spring事务管理1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Spring-事务管理8/23/2021主要内容编程式事务声明式事务Spring对Hibernate的集成(两种方式)实际开发常用技巧8/23/2021Spring事务概述在Spring中实现事务管理有两种方式,一种是传统的编程式事务管理,也就是程序员在编写程序代码实现事务的管理,具体包括定义事务的开始、在程序异常时进行事务的回滚及程序正常执行后的事务提交。另一种则是基于AOP技术实现的声明式事务管理,事务管理本身是一项共有的系统级服务功能,完全可以将事务管理抽象成一个事务切面,程序员不再关心事务管理的问题,把主要精力放在核心业务逻辑

2、代码的编写上,然后在需要进行事务管理的方法上切入事务切面,使之具有事务管理的功能,达到事务管理的目的。8/23/2021编程式事务下面以Hibernate为例,来考查一下在实际开发中如何使用编程式事务来开发项目。示例:1、建立两个实体:User和Log(用户和日志)2、要求:在保存用户时自动保存一份日志分析:完成上述功能,就涉及到对两张表的保存,要么全成功,要么全失败,为了能够达到这样的要求,因此必须采用事务来进行控制。8/23/2021使用编程式事务,在Hibernate中获取Session的方法需要使用如下方式才能保证对于同一个线

3、程不同的表的操作才能在一个事务下控制:在hibernate.cfg.xml文件中加入:thread说明:表示使用的是本地事务(jdbc事务)8/23/2021获取Session的方法的改进获取Session时必须采用:getCurrentSession()说明:获取的Session就会绑定到当前线程中,这样再保存其它实体对象的时候就保证了也在同一事务下操作(因为是在同一个线程中),同时当提交事务或回滚事

4、务后,Session会自动关闭,不用人为再进行关闭。8/23/2021示例代码:UserManagerImpl类代码:publicvoidaddUser(Useruser){Sessionsession=null;try{//session=HibernateUtils.getSession();session=HibernateUtils.getSessionFactory().getCurrentSession();session.beginTransaction();session.save(user);//保存日志Loglog

5、=newLog();log.setType("安全日志");log.setDetail("xxx进入系统");log.setDate(newDate());LogManagerImpllogManager=newLogManagerImpl();logManager.addLog(log);session.getTransaction().commit();}catch(Exceptione){e.printStackTrace();session.getTransaction().rollback();}}8/23/2021LogM

6、anagerImplpublicvoidaddLog(Loglog){HibernateUtils.getSessionFactory().getCurrentSession().save(log);}8/23/2021说明:thread当设置完该属性后,Hibernate会将获取到的Session绑定到当前线程中,这样再调用getCurrentSession()方法获取Session时,该方法首先查看

7、当前线程中有没有Session对象,如果没有,则从SessionFactory中获取Session对象并把该Session对象绑定到当前线程中,如果当前线程中有Session对象,该方法则直接从当前线程中取出Session对象直接使用,这样就保证了在同一个线程请求中,不管操作多少个实体对象使用的都是同一个Session对象,只要Session对象打开了事务,那么这些不同的实体对象的操作都处于同一个事务控制之下(因为这些实体对象使用的是同一个Session)。8/23/2021getCurrentSession()与openSessio

8、n()的区别采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会。采用getCurrentSession()创建的session在c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。