采用声明式事务
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
-
<hibernate-configuration>
-
<session-factory>
-
<propertyname="hibernate.connection.url">jdbc:mysql://localhost/spring_hibernate_2</property>
-
<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
-
<propertyname="hibernate.connection.username">root</property>
-
<propertyname="hibernate.connection.password">bjsxt</property>
-
<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
-
<propertyname="hibernate.show_sql">true</property>
-
<propertyname="hibernate.current_session_context_class">thread</property>
-
-
-
<mappingresource="com/bjsxt/usermgr/model/User.hbm.xml"/>
-
<mappingresource="com/bjsxt/usermgr/model/Log.hbm.xml"/>
-
</session-factory>
-
</hibernate-configuration>
- applicationContext-common.xml
-
-
<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
-
<propertyname="configLocation">
-
<value>classpath:hibernate.cfg.xml</value>
-
</property>
-
</bean>
-
-
<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
-
<propertyname="sessionFactory">
-
<refbean="sessionFactory"/>
-
</property>
-
</bean>
-
-
<tx:adviceid="txAdvice"transaction-manager="transactionManager">
-
<tx:attributes>
-
<tx:methodname="add*"propagation="REQUIRED"/>
-
<tx:methodname="del*"propagation="REQUIRED"/>
-
<tx:methodname="modify*"propagation="REQUIRED"/>
-
<tx:methodname="*"read-only="true"/>
-
</tx:attributes>
-
</tx:advice>
-
-
<aop:config>
-
<aop:pointcutid="allManagerMethod"expression="execution(*com.bjsxt.usermgr.manager.*.*(..))"/>
-
<aop:advisorpointcut-ref="allManagerMethod"advice-ref="txAdvice"/>
-
</aop:config>
-
</beans>
- applicationContext-beans.xml
-
<beanid="userManager"class="com.bjsxt.usermgr.manager.UserManagerImpl">
-
<propertyname="sessionFactory"ref="sessionFactory"/>
-
<propertyname="logManager"ref="logManager"/>
-
</bean>
-
<beanid="logManager"class="com.bjsxt.usermgr.manager.LogManagerImpl">
-
<propertyname="sessionFactory"ref="sessionFactory"/>
-
</bean>
- 具体参见spring-hibernate-2项目
分享到:
相关推荐
1. 基于Aspectj实现动态数据源...6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他都不需要,极大的减少了系统的复杂程度)
Spring的声明式事务管理是采用AOP(Aspect-Oriented Programming,面向切面编程)实现的。在编程式事务管理中,各事务处理代码实际上是相似的,这就造成了代码重复;而且编程式事务管理会造成事务管理代码和被管理的...
Java高级编程 实验报告 spring 声明事务 实验目的 掌握spring 声明式事务管理配置 实验环境 本实验采用本实验采用的eclipse或者 Myeclpse开发工具。Spring 4.0以上 Jdk1.7以上、oracle/mysql。
采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承HibernateDaoSupport类,使用this....
老板1该项目当初是放在代码云上,更新代码时没有及时push,又不小心给本地...本系统采用声明式事务控制方式对服务层进行事务控制,spring和hibernate合并后,spring在服务方法开发执行前创建会话,开启事务,方法结束提
在最近的一个项目中,采用springMVC、mybatis,MySQL、tomcat,事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。Spring Framework对事务管理提供了一致的抽象,
工程中使用多个jar包,最主要的是easyDao.jar,它具有操作方便,支持多种查询结果集映射(泛型类,Map,数组)的特点,同时支持驼峰命令法的自动转换及声明式事务处理。 easyDao是基于dbutil和cglib组件的开源jar包。
本项目结 构上分为表现层、业务层和数据访问层,层次间的依赖关系自下到上。采用的技术有Struts,Spring,Hibernate,Log4J,...事务部分利用Spring的声明式事务管 理。为提高性能,采用Servlet Filter实现了缓存代理
近年来,互联网已不是什么时髦的词汇,在国内的市场网上订票的比例也越来越多。...事务部分利用Spring的声明式事务管理。该系统严格按照软件开发流程:需求分析、页面设计、概要设计、详细设计、测试运行等
利用Spring的AOP来做声明式事务,利用Spring的Annotation方式基本达到了零配置,持久层全部使用Hibernate Annotation方式,主要采用的是标准的JPA注解,这样减少了大量的Hibernate映射文件,提高了可维护性,Java与...
事务管理 :通过Spring的声明式事务管理,确保数据的一致性和完整性。该资源包含完整的项目源代码、配置文件以及相关依赖,可以帮助开发者快速搭建和部署一个基于SpringBoot的秒杀系统。适用于Java后端开发人员、...
事务部分利用 spring 的声明式事务管理。为提高性能,采用 servlet filter 实现了缓存代理” 写好项目经验需要注意技术框架、技术细节、业务知识、团队合作和问题解决等几点。只有写好项目经验,才能让用人单位看到...
5. **技术栈**:项目采用SSM框架,结合了Spring的轻量级IoC容器和声明式事务管理,Spring MVC的强大MVC框架以及MyBatis的动态SQL语言能力,提供了一个高效稳定的开发平台。 通过这个系统,组织者可以有效地管理赛事...
SSM框架后端开发:整合Spring的轻量级IoC容器和声明式事务管理,SpringMVC的强大MVC框架以及MyBatis的动态SQL语言能力,构建稳定高效的后台服务。 数据库设计:使用MySQL等关系型数据库存储报修数据,包括用户信息、...
5. **技术栈**:项目采用SSM框架,结合了Spring的轻量级IoC容器和声明式事务管理,Spring MVC的强大MVC框架以及MyBatis的动态SQL语言能力,提供了一个高效稳定的开发平台。 通过这个系统,用户可以方便地在线观看...
大作业:自定义@Service、@Autowired、@Transactional注解类,完成基于注解的IOC容器(Bean对象创建及依赖注入维护)和声明式事务控制,写到转账工程中,并且可以实现转账成功和转账异常时事务回滚 编程题: 自定义...
编程式采用的方式可以控制事务的边界,而声明式采用配置 xml 方式,将事务管理与实际业务代码解耦。 六、Spring 框架概述 Spring 是一个轻量级框架,简化了 Java 企业级开发。Spring 的核心是 Spring Core 模块,...
方便的事务管理:Spring提供的声明式事务处理可以全面有效地处理事务。 异常包装:Spring能够包装Hibernate的异常,使开发者可以选择恰当的层来处理异常。 24.2 管理SessionFactory Hibernate的SessionFactory,是...
5.3 声明式事务 5.3.1 理解事务属性 5.3.2 声明一个简单的事务策略 5.4 通过方法名声明事务 5.4.1 使用NameMatchTransactionAttributeSource 5.4.2 名称匹配事务的捷径 5.5 用元数据声明...
J2EE学习的一点经验与大家分享 采用EJB架构的目标在于: 减轻直接操作底层数据库的工作量 为企业级开发引入了面向对象/面向服务的开发架构 数据对象生命周期的自动管理 ... 集成/声明式的安全/事务管理 ……