`

spring入门实例-DAO,事务

阅读更多

spring入门实例-DAO,事务

 

实例:

配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean name="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">

		<property name="driverClassName">
			<value>oracle.jdbc.driver.OracleDriver</value>
		</property>

		<property name="url">
			<value>jdbc:oracle:thin:@192.168.32.227:1521:orcl</value>
		</property>

		<property name="password">
			<value>lpromis</value>
		</property>

		<property name="username">
			<value>lpromis</value>
		</property>
	</bean>
	
	<bean id="transactionManager"
	class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref bean="dataSource"></ref>
		</property>
	</bean>
	
	<bean id="userDAO"
	class="com.myspring.bussiness.CustomerDAO">
		<property name="dataSource">
			<ref bean="dataSource"></ref>
		</property>
		<property name="transactionManager">
			<ref local="transactionManager"></ref>
		</property>
	</bean>

</beans>

 实例中的事务使用的是DataSourceTransactionManager实现的,并且向其中注入了datasource

bean代码:

public class CustomerDAO
{
	/**
	 * datasource
	 */
	private DataSource dataSource;
	public void setDataSource(DataSource dataSource)
	{
		this.dataSource = dataSource;
	}
	public void setTransactionManager(PlatformTransactionManager transactionManager)
	{
		this.transactionManager = transactionManager;
	}
	/**
	 * 事务管理类,初始化已将datasource作为参数
	 */
	private PlatformTransactionManager transactionManager;

	
	/**
	 * 普通使用事务的方法 
	 * 定义事务
	 * 记录事务点
	 * 提交事务点/回滚事务点
	 */
	public void insertCustomer()
	{
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();
		TransactionStatus status = transactionManager.getTransaction(def);
		try
		{
			JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSource);
			jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000023','testname1')");
			jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000023','testname2')");
			jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000025','testname3')");
			transactionManager.commit(status);
		}
		catch (Exception e)
		{
			transactionManager.rollback(status);
			System.out.println("*********roll back");
		}
	}
	
	/**
	 * 事务模板,无返回值
	 */
	public void insertCustomerTamplate()
	{
		TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
		transactionTemplate.execute(new TransactionCallbackWithoutResult(){

			@Override
			protected void doInTransactionWithoutResult(TransactionStatus arg0)
			{
				// TODO Auto-generated method stub
				JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
				jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000023','testname4')");
				jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000024','testname5')");
				jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000025,'testname6')");
			}
		});
	}
	
	/**
	 * 事务模板,带有返回值
	 */
	public void queryCustomerTamplate()
	{
		TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
		Object result = transactionTemplate.execute(
				new TransactionCallback<Object>()
				{
					@Override
					public Object doInTransaction(TransactionStatus arg0)
					{
						JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
						jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000023','testname4')");
						jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000024','testname5')");
						jdbcTemplate.update("insert into t_lpromis_yxgl_khxx(id,khqc) values('000025','testname6')");
						List<Map<String,Object>> rows = jdbcTemplate.queryForList("select eee from t_lpromis_yxgl_khxx");
						return rows;
					}
				});
		if(result instanceof List)
		{
			List re = (List) result;
			for (int i = 0; i < re.size(); i++)
			{
				Map<String,Object> one = (Map<String, Object>) re.get(i);
				System.out.println(one.get("id"));
			}
		}
	}
	
	public static void main(String[] args)
	{
		ApplicationContext context = new ClassPathXmlApplicationContext("com/myspring/bussiness/transactionManager.xml");
		CustomerDAO cd = (CustomerDAO) context.getBean("userDAO");
		cd.queryCustomerTamplate();
	}
}
 以上用JdbcTemplate实现的jdbc的一系列操作,以及设置事务,其中的sql语句故意错误,验证事务rollback效果
分享到:
评论

相关推荐

    Spring-data-jpa常用教程.pdf

    Spring-data-jpa 是 Spring 家族中的一个重要成员,它主要用于简化基于 Java Persistence API (JPA) 的数据访问层(DAO)的开发工作。JPA 作为 Java 平台的一种标准,旨在为 Java 应用程序提供一种通用的对象关系...

    spring入门实例代码

    在`spring入门实例`中,你可能会看到如何使用`@Autowired`注解来自动装配数据源,以及如何通过`@Repository`注解创建DAO层的bean。 事务管理也是Spring的一大亮点。Spring支持编程式和声明式事务管理。声明式事务...

    dbApi-spring-boot-starter-demo:dbApi-spring-boot-starter案例代码

    "dbApi-spring-boot-starter-demo-master"是一个完整的实例项目,它展示了如何集成和使用dbApi-spring-boot-starter。主要包含以下几个部分: 1. 主配置:分析项目的主配置文件,了解如何配置数据库连接以及启动器...

    spring data jpa入门实例

    【Spring Data JPA 入门实例】 Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码...

    spring菜鸟入门经典实例

    在Spring入门阶段,首先要理解的是依赖注入(DI)。DI是一种设计模式,它允许我们解耦组件,让它们之间通过接口而非具体的实现进行交互。Spring通过容器管理对象的生命周期和依赖关系,我们只需要配置好bean的定义,...

    javastruts2入门学习实例--用户注册和用户登录整合.rar

    这个入门实例通过实际操作,帮助初学者理解Struts2框架的运作方式,以及如何将它应用到实际的用户注册和登录功能中。通过学习和实践,开发者可以更好地掌握Java Web开发的基本技能,并为更复杂的项目打下坚实的基础...

    mybatis-spring-1.0.2-reference.pdf

    容器管理事务是指由应用服务器或Spring容器本身管理事务,适用于那些不希望在业务逻辑中显式控制事务的场景。 ##### 4.3 编程式事务管理 对于需要更细粒度控制的场景,MyBatis-Spring提供了编程式事务管理的支持,...

    非注解Springmvc+spring+hibernate 入门实例

    下面我们将深入探讨"非注解SpringMVC+Spring+Hibernate入门实例"中的关键知识点。 首先,让我们从SpringMVC开始。SpringMVC是一个Model-View-Controller架构模式的实现,用于构建Web应用程序。在非注解方式下,我们...

    struts2 hibernate spring整合入门(附实例源码及jarbao--用户名字段的操作)

    在整合Spring时,Struts2可以利用Spring的依赖注入(DI)特性,将Service层对象注入到Action中,使得Action无需手动创建Service实例。 接下来,Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作。在本...

    spring3.0mvc自学教程ppt+注解教程+注解实例+springmybatis教程+项目实例+中文api (老师的心血)从入门到项目实战

    4. **Spring与MyBatis整合**:Spring MyBatis教程会讲解如何将Spring的依赖注入和事务管理与MyBatis的SQL映射相结合,实现更灵活的数据访问。这包括配置MyBatis的SqlSessionFactory,创建Mapper接口,以及使用`@...

    Spring入门教程.pdf

    ### Spring入门教程知识点详解 #### 一、理论知识 ##### 1. 依赖注入与控制反转 - **依赖注入**(Dependency Injection, DI):在应用程序的运行期间,由外部容器(例如Spring容器)动态地将一个对象所依赖的其他...

    spring入门实例

    3. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring提供了AOP支持,允许开发者将关注点(如日志、事务管理)与业务逻辑分离,实现代码的模块化和解耦。 4. **数据访问集成**:Spring支持多种数据库...

    Spring2+实例

    描述中提到的“添加用户实例”是Spring框架中一个常见的应用场景,通常涉及到数据持久化、事务管理和验证。在Spring 2.x中,我们可以使用Spring JDBC或Hibernate等ORM工具来与数据库交互,实现用户数据的增删改查。...

    Spring框架笔记-搭建-基础理论--面试.pdf

    Spring框架覆盖了Java EE架构的每一层,主要包括web层的Spring MVC、Service层的Bean管理和声明式事务管理、以及DAO层的JDBC模板和ORM框架整合。通过Spring框架的应用,开发者可以使用其提供的各种功能模块和工具来...

    spring data jpa 入门例子

    通过使用Spring Data JPA,你可以避免编写大量的DAO(数据访问对象)和Repository代码,只需定义Repository接口,Spring Data JPA就会自动生成实现,包括CRUD操作。 2. **JPA简介** Java Persistence API(JPA)是...

    struts2+hibernate3.2+spring2.0配置+入门实例

    【Struts2+Hibernate3.2+Spring2.0配置+入门实例】 本文将详细介绍如何配置和构建一个基于Struts2、Hibernate3.2和Spring2.0的企业级Java应用入门实例。首先,我们理解整体架构,这有助于我们更好地了解各个组件的...

    spring+struts+hibernate+dwr+jstl做的实例

    结合spring struts hibernate dwr jstl做的实例,struts hibernate dwr 与Spring完全结合,实现用户列表、信息增、删、改、查、维护时用户重名提示等功能,还包括页面自动转码设置(web.xml),Hibernate管理服务按...

Global site tag (gtag.js) - Google Analytics