- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
spring事务管理1
Spring-事务管理 Spring整合Hibernate最终的注入关系 MyDao HibernateTemplate SessionFactory DataSource DB 数据库 Spring整合Hibernate后,关于实体映射文件的配置方式: 通常当Spring集成Hibernate后,一般有两种方式可以加载实体映射文件: 使用mappingResources属性-开发中使用较少 property?name=mappingResources?? ??????list?? ???? value WEB-INF/conf/hibernate/cat.hbm.xml /value?? ??????????value WEB-INF/conf/hibernate/dog.hbm. Xml /value?? ????????????????...... ?? ??????/list?? /property? 使用mappingDirectoryLocations属性-开发中经常使用 property name=mappingDirectoryLocations list valueclasspath:com/domain/value /list /property * Softeem Consultancy Service * Softeem Consultancy Service 主要内容 编程式事务 声明式事务 Spring对Hibernate的集成(两种方式) 实际开发常用技巧 Spring事务概述 在Spring中实现事务管理有两种方式,一种是传统的编程式事务管理,也就是程序员在编写程序代码实现事务的管理,具体包括定义事务的开始、在程序异常时进行事务的回滚及程序正常执行后的事务提交。 另一种则是基于AOP技术实现的声明式事务管理,事务管理本身是一项共有的系统级服务功能,完全可以将事务管理抽象成一个事务切面,程序员不再关心事务管理的问题,把主要精力放在核心业务逻辑代码的编写上,然后在需要进行事务管理的方法上切入事务切面,使之具有事务管理的功能,达到事务管理的目的。 编程式事务 下面以Hibernate为例,来考查一下在实际开发中如何使用编程式事务来开发项目。 示例: 1、建立两个实体:User和Log(用户和日志) 2、要求:在保存用户时自动保存一份日志 分析:完成上述功能,就涉及到对两张表的保存,要么全成功,要么全失败,为了能够达到这样的要求,因此必须采用事务来进行控制。 使用编程式事务,在Hibernate中获取Session的方法需要使用如下方式才能保证对于同一个线程不同的表的操作才能在一个事务下控制: 在hibernate.cfg.xml文件中加入: property name=hibernate.current_session_context_class thread /property 说明:表示使用的是本地事务(jdbc事务) 获取Session的方法的改进 获取Session时必须采用:getCurrentSession() 说明:获取的Session就会绑定到当前线程中,这样再保存其它实体对象的时候就保证了也在同一事务下操作(因为是在同一个线程中),同时当提交事务或回滚事务后,Session会自动关闭,不用人为再进行关闭。 示例代码: UserManagerImpl类代码: public void addUser(User user) { Session session = null; try { //session = HibernateUtils.getSession(); session = HibernateUtils.getSessionFactory().getCurrentSession(); session.beginTransaction(); session.save(user); //保存日志 Log log = new Log(); log.setType(安全日志); log.setDetail(xxx进入系统); log.setDate(new Date()); LogManagerImpl logM
文档评论(0)