`

采用声明式事务

阅读更多
采用声明式事务

1、声明式事务配置
* 配置SessionFactory
* 配置事务管理器
* 事务的传播特性
* 那些类那些方法使用事务

2、编写业务逻辑方法
* 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是
Hibernate Session的轻量级封装
* 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的
* 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理
* 关于事务边界的设置,通常设置到业务层,不要添加到Dao上

3、了解事务的几种传播特性
1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启
2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
7. PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,
则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

4、Spring事务的隔离级别
1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5. ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。

hibernate.cft.xml

  1. <hibernate-configuration>
  2. <session-factory>
  3. <propertyname="hibernate.connection.url">jdbc:mysql://localhost/spring_hibernate_2</property>
  4. <propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  5. <propertyname="hibernate.connection.username">root</property>
  6. <propertyname="hibernate.connection.password">bjsxt</property>
  7. <propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  8. <propertyname="hibernate.show_sql">true</property>
  9. <propertyname="hibernate.current_session_context_class">thread</property>
  10. <!--
  11. <propertyname="hibernate.current_session_context_class">jta</property>
  12. -->
  13. <mappingresource="com/bjsxt/usermgr/model/User.hbm.xml"/>
  14. <mappingresource="com/bjsxt/usermgr/model/Log.hbm.xml"/>
  15. </session-factory>
  16. </hibernate-configuration>
  17. applicationContext-common.xml
  18. <!--配置sessionFactory-->
  19. <beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  20. <propertyname="configLocation">
  21. <value>classpath:hibernate.cfg.xml</value>
  22. </property>
  23. </bean>
  24. <!--配置事务管理器-->
  25. <beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  26. <propertyname="sessionFactory">
  27. <refbean="sessionFactory"/>
  28. </property>
  29. </bean>
  30. <!--配置事务的传播特性-->
  31. <tx:adviceid="txAdvice"transaction-manager="transactionManager">
  32. <tx:attributes>
  33. <tx:methodname="add*"propagation="REQUIRED"/>
  34. <tx:methodname="del*"propagation="REQUIRED"/>
  35. <tx:methodname="modify*"propagation="REQUIRED"/>
  36. <tx:methodname="*"read-only="true"/>
  37. </tx:attributes>
  38. </tx:advice>
  39. <!--那些类的哪些方法参与事务-->
  40. <aop:config>
  41. <aop:pointcutid="allManagerMethod"expression="execution(*com.bjsxt.usermgr.manager.*.*(..))"/>
  42. <aop:advisorpointcut-ref="allManagerMethod"advice-ref="txAdvice"/>
  43. </aop:config>
  44. </beans>
  45. applicationContext-beans.xml
  46. <beanid="userManager"class="com.bjsxt.usermgr.manager.UserManagerImpl">
  47. <propertyname="sessionFactory"ref="sessionFactory"/>
  48. <propertyname="logManager"ref="logManager"/>
  49. </bean>
  50. <beanid="logManager"class="com.bjsxt.usermgr.manager.LogManagerImpl">
  51. <propertyname="sessionFactory"ref="sessionFactory"/>
  52. </bean>
  53. 具体参见spring-hibernate-2项目

分享到:
评论

相关推荐

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    1. 基于Aspectj实现动态数据源...6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他都不需要,极大的减少了系统的复杂程度)

    MyBatis Spring声明式事务管理示例代码

    Spring的声明式事务管理是采用AOP(Aspect-Oriented Programming,面向切面编程)实现的。在编程式事务管理中,各事务处理代码实际上是相似的,这就造成了代码重复;而且编程式事务管理会造成事务管理代码和被管理的...

    实验 spring 声明事务

    Java高级编程 实验报告 spring 声明事务 实验目的 掌握spring 声明式事务管理配置 实验环境 本实验采用本实验采用的eclipse或者 Myeclpse开发工具。Spring 4.0以上 Jdk1.7以上、oracle/mysql。

    Spring2.5和Hibernate3集成--学习spring aop ioc

    采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承HibernateDaoSupport类,使用this....

    bos1:基于BS架构而设计开发的物流公司的一个后台管理系统,属于物流公司整个ERP平台的一个组成部分。该系统主要有基础档案,业务中断,物流调度和系统管理等相关功能模块

    老板1该项目当初是放在代码云上,更新代码时没有及时push,又不小心给本地...本系统采用声明式事务控制方式对服务层进行事务控制,spring和hibernate合并后,spring在服务方法开发执行前创建会话,开启事务,方法结束提

    SpringMVC+MyBatis声明式事务管理

    在最近的一个项目中,采用springMVC、mybatis,MySQL、tomcat,事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。Spring Framework对事务管理提供了一致的抽象,

    图书管理系统,使用MVC设计模式(vo,dao,service,servlet),前端采用Bootstrap

    工程中使用多个jar包,最主要的是easyDao.jar,它具有操作方便,支持多种查询结果集映射(泛型类,Map,数组)的特点,同时支持驼峰命令法的自动转换及声明式事务处理。 easyDao是基于dbutil和cglib组件的开源jar包。

    idc网管系统

    本项目结 构上分为表现层、业务层和数据访问层,层次间的依赖关系自下到上。采用的技术有Struts,Spring,Hibernate,Log4J,...事务部分利用Spring的声明式事务管 理。为提高性能,采用Servlet Filter实现了缓存代理

    基于Android长途汽车订票系统(源码+文档).rar

    近年来,互联网已不是什么时髦的词汇,在国内的市场网上订票的比例也越来越多。...事务部分利用Spring的声明式事务管理。该系统严格按照软件开发流程:需求分析、页面设计、概要设计、详细设计、测试运行等

    流程管理系统,rbac,dwr

    利用Spring的AOP来做声明式事务,利用Spring的Annotation方式基本达到了零配置,持久层全部使用Hibernate Annotation方式,主要采用的是标准的JPA注解,这样减少了大量的Hibernate映射文件,提高了可维护性,Java与...

    基于SpringBoot的秒杀系统设计与实现.zip

    事务管理 :通过Spring的声明式事务管理,确保数据的一致性和完整性。该资源包含完整的项目源代码、配置文件以及相关依赖,可以帮助开发者快速搭建和部署一个基于SpringBoot的秒杀系统。适用于Java后端开发人员、...

    个人简历中如何写项目经验.doc

    事务部分利用 spring 的声明式事务管理。为提高性能,采用 servlet filter 实现了缓存代理” 写好项目经验需要注意技术框架、技术细节、业务知识、团队合作和问题解决等几点。只有写好项目经验,才能让用人单位看到...

    基于SSM框架ssm足球赛会管理系统.zip

    5. **技术栈**:项目采用SSM框架,结合了Spring的轻量级IoC容器和声明式事务管理,Spring MVC的强大MVC框架以及MyBatis的动态SQL语言能力,提供了一个高效稳定的开发平台。 通过这个系统,组织者可以有效地管理赛事...

    weixin183基于小程序宿舍报修系统的设计与实现ssm--论文pf.rar

    SSM框架后端开发:整合Spring的轻量级IoC容器和声明式事务管理,SpringMVC的强大MVC框架以及MyBatis的动态SQL语言能力,构建稳定高效的后台服务。 数据库设计:使用MySQL等关系型数据库存储报修数据,包括用户信息、...

    基于SSM框架ssm网络视频播放器.zip

    5. **技术栈**:项目采用SSM框架,结合了Spring的轻量级IoC容器和声明式事务管理,Spring MVC的强大MVC框架以及MyBatis的动态SQL语言能力,提供了一个高效稳定的开发平台。 通过这个系统,用户可以方便地在线观看...

    lagou-transfer:Spring框架大作业

    大作业:自定义@Service、@Autowired、@Transactional注解类,完成基于注解的IOC容器(Bean对象创建及依赖注入维护)和声明式事务控制,写到转账工程中,并且可以实现转账成功和转账异常时事务回滚 编程题: 自定义...

    Java框架笔试题(含答案).docx

    编程式采用的方式可以控制事务的边界,而声明式采用配置 xml 方式,将事务管理与实际业务代码解耦。 六、Spring 框架概述 Spring 是一个轻量级框架,简化了 Java 企业级开发。Spring 的核心是 Spring Core 模块,...

    第24次课-1 Spring与Hibernate的整合

    方便的事务管理:Spring提供的声明式事务处理可以全面有效地处理事务。 异常包装:Spring能够包装Hibernate的异常,使开发者可以选择恰当的层来处理异常。 24.2 管理SessionFactory Hibernate的SessionFactory,是...

    spring in action英文版

     5.3 声明式事务  5.3.1 理解事务属性  5.3.2 声明一个简单的事务策略  5.4 通过方法名声明事务  5.4.1 使用NameMatchTransactionAttributeSource  5.4.2 名称匹配事务的捷径  5.5 用元数据声明...

    j2ee 学 习 笔 记

    J2EE学习的一点经验与大家分享 采用EJB架构的目标在于: 减轻直接操作底层数据库的工作量 为企业级开发引入了面向对象/面向服务的开发架构 数据对象生命周期的自动管理 ... 集成/声明式的安全/事务管理 ……

Global site tag (gtag.js) - Google Analytics