`
lindongxiao
  • 浏览: 47634 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
社区版块
存档分类
最新评论

spring 事务笔记(一)

阅读更多
这里使用hibernate编程式事务管理.HibernateTransactionManager实现了PlatformTransactionManager.Spring小组推荐采用第一种方法(即使用 TransactionTemplate)。
这个接口是控制事务属性
import java.sql.Connection;
public interface TransactionDefinition {
    int getPropagationBehavior();
    int getIsolationLevel();
    int getTimeout();
    boolean isReadOnly();
}

写一个方法用来设置事务属性
TransactionDefinition.PROPAGATION_REQUIRED表示当前方法必须运行在一个事务中运行.如果一个现有的事务正在进行中,它将在该方法的运行期间被挂起.如果使用jtatansactionManager的话,需要访问transcaionManager.

private TransactionDefinition getDefinition(int isolationLevel) {
        DefaultTransactionDefinition def = new DefaultTransactionDefinition(
            TransactionDefinition.PROPAGATION_REQUIRED);
        def.setIsolationLevel(isolationLevel);
        
        return def;
    }

TransactionDefinition.ISOLATION_READ_COMMITTED这里传进去事务隔离级别.
允许在并发事务中已经提交后读取.可防止脏读.但幻读和不可重复读仍可能发生
 public void insert() {
	        TransactionStatus status = transactionManager.getTransaction(
	            getDefinition(TransactionDefinition.ISOLATION_READ_COMMITTED));
	        try {
	        	            A ab = new A(new Integer(188),"c++");
	            A abc = new A(new Integer(199),"java");
	            testDao.insert(ab);
	            testDao.insert(abc);
	            transactionManager.commit(status);
	        } catch (Throwable t) {
	            transactionManager.rollback(status);
	        }
	    
	    }

以上是具体的实现的类
package test;

import hibernate.A;

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

public class ProgrammaticManager {
	private ITestDao testDao;
	private PlatformTransactionManager transactionManager;
	public ProgrammaticManager() {
	}
	public ProgrammaticManager(ITestDao testDao) {
		this.testDao=testDao;
	}
	public PlatformTransactionManager getTransactionManager() {
		return transactionManager;
	}
	
	public void setTransactionManager(PlatformTransactionManager transactionManager) {
		this.transactionManager = transactionManager;
	}
	
	public ITestDao getTestDao() {
		return testDao;
	}
	
	public void setTestDao(ITestDao iTestDao) {
		this.testDao=iTestDao;
	}
	private TransactionDefinition getDefinition(int isolationLevel) {
        DefaultTransactionDefinition def = new DefaultTransactionDefinition(
            TransactionDefinition.PROPAGATION_REQUIRED);
        def.setIsolationLevel(isolationLevel);
        
        return def;
    }
	 public void insert() {
	        TransactionStatus status = transactionManager.getTransaction(
	            getDefinition(TransactionDefinition.ISOLATION_READ_COMMITTED));
	        try {

	            A ab = new A(new Integer(188),"c++");
	            A abc = new A(new Integer(199),"java");
	            testDao.insert(ab);
	            testDao.insert(abc);
	            transactionManager.commit(status);
	        } catch (Throwable t) {
	            transactionManager.rollback(status);
	        }
	    
	    }

}

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
		<property name="username" value="root"></property>
		<property name="password" value="agsfd"></property>
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="mappingResources">
			<value>hibernate/A.hbm.xml</value>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
			</props>
		</property>

	</bean>

	<!-- 
	-->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<bean id="transactionTemplate"
		class="org.springframework.transaction.support.TransactionTemplate">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
	</bean>
	<bean id="hibernateTemplate"
		class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<bean id="testDao" class="test.TestDao">
		<property name="hibernateTemplate">
			<ref bean="hibernateTemplate" />
		</property>
	</bean>
	<bean id="programmaticManager" class="test.ProgrammaticManager">
		<property name="testDao">
		<ref bean="testDao"/>
		</property>
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
	</bean>
	
</beans>

package test;

import hibernate.A;

public interface ITestDao {
    public void   insert(A a);
}

package test;


import hibernate.A;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class TestDao extends HibernateDaoSupport implements ITestDao {

	public void insert(A a) {

		 getHibernateTemplate().save(a);
	}

}

ackage test;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
	public static void main(String[] args) {
		ApplicationContext acx = new ClassPathXmlApplicationContext(
				"file:src/applicationContext.xml");

//		TransactionManager transaction = (TransactionManager) acx
//				.getBean("transactionManager");
	     ProgrammaticManager pm= (ProgrammaticManager) acx.getBean("programmaticManager");
		  pm.insert();
	}
}

数据表a 两个字段
更方便的类是transactiontemplate用法跟hibernatetemplate差不多
分享到:
评论

相关推荐

    Spring学习笔记(精华全记录)

    3. **面向切面编程 (AOP)**:Spring支持面向切面编程,这是一种将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来的编程范式。通过AOP,开发者可以在不修改业务逻辑代码的情况下添加新的功能。 4. **ORM...

    spring-note spring 读书笔记

    6. **Spring事务管理**: Spring提供了PlatformTransactionManager接口,支持不同的事务管理策略,如编程式和声明式事务。`spring_transaction.txt`会详细阐述如何配置事务管理,以及@Transactional注解的使用。 7. ...

    Spring学习笔记+学习源码.zip

    Spring框架是Java开发中的核心组件,它为应用程序提供了一个全面的基础设施,包括依赖注入(DI)、面向切面编程(AOP)以及数据访问等服务。SSM是Spring、SpringMVC和MyBatis的组合,是Java Web开发的常用框架栈。这...

    spring hibernate 事务管理学习笔记(一)

    在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...

    Spring学习笔记.zip

    面向切面编程是Spring提供的另一个重要功能,它允许开发者将关注点分离,比如日志、事务管理等,从主业务逻辑中抽取出来,形成独立的“切面”。切面可以在特定的“连接点”(如方法调用)上织入,提高了代码的复用性...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    6. **事务管理**: 提供编程和声明式事务管理,与Spring整合时通常使用声明式事务。 **Spring3笔记** Spring是企业级应用的全面解决方案,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。以下是关键点: 1...

    Spring Data JPA 笔记

    5. **事务管理**:Spring Data JPA集成Spring的事务管理,可以方便地在方法级别控制事务的开始、提交、回滚,确保数据一致性。 6. ** auditing**:Spring Data JPA还提供了审计功能,通过`@CreationTimestamp`和`@...

    Spring学习笔记&源码

    Spring框架是Java开发中不可或缺的一部分,它以其IoC(控制反转)和AOP(面向切面编程)的核心特性,极大地简化了企业级应用的开发。本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程...

    马士兵Spring课堂笔记(超级详细版).pdf

    马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    spring课堂笔记的相关知识

    Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理 AOP编程的支持 Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能 声明式事务的支持 只需要通过配置就可以...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    spring培训笔记第一天

    AOP是Spring提供的另一个关键特性,它允许将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,通过声明式的方式在多个业务方法上进行统一处理。AOP的核心机制是代理,Spring通过动态代理技术实现了AOP,...

    Spring5笔记.zip

    虽非Spring5的一部分,但Spring Boot与Spring5紧密相关,它简化了Spring应用的初始化和配置。Spring Boot 2.x版本已经默认集成了Spring5,提供了快速开发现代Web应用的能力。 5. **Spring MVC**: Spring5对...

    spring学习笔记

    #### 六、Spring事务管理 Spring提供了声明式的事务管理机制,简化了事务的配置和管理。 ##### 1. 事务的概念 - **原子性**:事务是一个不可分割的工作单元。 - **一致性**:事务完成后系统必须处于一致状态。 - *...

    百知教育Spring详解笔记.rar

    Spring框架是Java开发中的核心组件,它以其IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)两大特性而著名,为开发者提供了全面的解决方案,包括依赖注入、数据访问、...

    Spring笔记示例源代码

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。"Spring笔记示例源...

    达内,tarena,spring笔记,springPPT课件,达内spring笔记

    Spring框架是Java开发中广泛应用的一个开源框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出。Spring以其轻量级、模块化和强大的依赖注入特性而闻名,它简化了企业级Java...

    spring课堂笔记

    Spring框架是Java开发中广泛应用的一个开源框架,以其强大的功能和灵活的设计深受开发者喜爱。这篇"spring课堂笔记"包含了两部分关于Spring的学习心得,对于初学者来说是非常宝贵的资源。以下是笔记中可能涵盖的关键...

Global site tag (gtag.js) - Google Analytics