Spring之事务操作(配置文件)

UserDao.java

 1 package helloworld.tx;
 2
 3 import org.springframework.jdbc.core.JdbcTemplate;
 4
 5 public class UserDao {
 6
 7     private JdbcTemplate jdbcTemplate;
 8
 9     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
10         this.jdbcTemplate = jdbcTemplate;
11     }
12
13     //    实现添加操作
14     public void add() {
15         // 调用jdbcTemplate对象中的方法实现操作
16         String sql = "insert into salary value(?,?)";
17         // 表结构:name(varchar 20),salary(int 20)
18         int rows = jdbcTemplate.update(sql, "Tom", 10000);
19         System.out.println("插入行数:" + rows);
20         rows = jdbcTemplate.update(sql, "Jerry", 10000);
21         System.out.println("插入行数:" + rows);
22     }
23
24     //    减少
25     public void reduce(String name,int num) {
26         // 调用jdbcTemplate对象中的方法实现操作
27         String sql = "update salary set salary = (salary - ?) where name= ?";
28         // 表结构:name(varchar 20),salary(int 20)
29         int rows = jdbcTemplate.update(sql, num, name);
30         System.out.println("修改行数:" + rows);
31     }
32
33     //    增加
34     public void increase(String name,int num) {
35         // 调用jdbcTemplate对象中的方法实现操作
36         String sql = "update salary set salary = (salary + ?) where name= ?";
37         // 表结构:name(varchar 20),salary(int 20)
38         int rows = jdbcTemplate.update(sql, num, name);
39         System.out.println("修改行数:" + rows);
40     }
41
42
43 }

UserSerivce.java

 1 package helloworld.tx;
 2
 3 public class UserSerivce {
 4     private UserDao userDao;
 5
 6     public void setUserDao(UserDao userDao) {
 7         this.userDao = userDao;
 8     }
 9
10     public void add(){
11         userDao.add();
12     }
13
14 //    工资调整
15     public void updateAccount(){
16
17         userDao.reduce("Tom",1000);
18
19 //        制造异常
20 //        int n = 100/0;
21
22         userDao.increase("Jerry",1000);
23
24     }
25
26 }
TestTX.java
 1 package helloworld.tx;
 2
 3 import org.junit.Before;
 4 import org.junit.Ignore;
 5 import org.junit.Test;
 6 import org.springframework.context.ApplicationContext;
 7 import org.springframework.context.support.ClassPathXmlApplicationContext;
 8
 9 /*
10 * 事务操作举例
11 * */
12 public class TestTX {
13     @Before
14     public void beforeRun() {
15         System.out.println("beforeRun");
16     }
17
18 //    插入数据
19     @Ignore
20     @Test
21     public void add() {
22         ApplicationContext context =
23                 new ClassPathXmlApplicationContext("beans_tx.xml");
24         UserSerivce userSerivce = (UserSerivce) context.getBean("userSerivce");
25         userSerivce.add();
26     }
27
28     @Test
29     public void update() {
30         ApplicationContext context =
31                 new ClassPathXmlApplicationContext("beans_tx.xml");
32         UserSerivce userSerivce = (UserSerivce) context.getBean("userSerivce");
33         userSerivce.updateAccount();
34     }
35
36 }

beans_tx.xml

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3        xmlns:contexnt="http://www.springframework.org/schema/context"
 4        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6         http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/context
 8         http://www.springframework.org/schema/context/spring-context-2.5.xsd
 9         http://www.springframework.org/schema/tx
10         http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
11 <!--事务配置文件-->
12
13     <!--配置c3p0连接池-->
14     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
15         <!--注入属性-->
16         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
17         <property name="jdbcUrl" value="jdbc:mysql://192.168.184.130:3306/gxrdb"></property>
18         <property name="user" value="root"></property>
19         <property name="password" value="root"></property>
20     </bean>
21
22
23     <!-- 第一步、配置事务管理器 -->
24     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
25         <property name="dataSource" ref="dataSource"/>
26     </bean>
27     <!-- 第二步、配置事务增强 -->
28     <tx:advice id="txAdvice" transaction-manager="transactionManager">
29         <!--做事务操作-->
30         <tx:attributes>
31             <!--事务操作的方法的匹配规则-->
32             <!--name:方法名;propagation:隔离级别-->
33             <tx:method name="update*" propagation="REQUIRED"/>
34             <tx:method name="add"/>
35         </tx:attributes>
36     </tx:advice>
37     <!-- 第三步、配置切面-->
38     <aop:config>
39         <!--切入点-->
40         <!-- *表示任意方法;..表示任意参数-->
41         <aop:pointcut id="pointcut1" expression="execution(* helloworld.tx.UserSerivce.*(..))"></aop:pointcut>
42         <!--切面-->
43         <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"></aop:advisor>
44     </aop:config>
45
46
47     <!--创建service对象,注入dao对象-->
48     <bean id="userSerivce" class="helloworld.tx.UserSerivce">
49         <property name="userDao" ref="userDao"></property>
50     </bean>
51
52     <!--创建DAO对象,注入JdbcTemplate对象-->
53     <bean id="userDao" class="helloworld.tx.UserDao">
54         <property name="jdbcTemplate" ref="jdbcTemplate"></property>
55     </bean>
56
57     <!--创建JdbcTemplate对象,注入连接池dataSource-->
58     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
59         <property name="dataSource" ref="dataSource"></property>
60     </bean>
61
62 </beans>

原文地址:https://www.cnblogs.com/gongxr/p/8252858.html

时间: 2024-10-30 05:55:03

Spring之事务操作(配置文件)的相关文章

spring的事务操作(重点)

这篇文章一起来回顾复习下spring的事务操作.事务是spring的重点, 也是面试的必问知识点之一. 说来这次面试期间,也问到了我,由于平时用到的比较少,也没有关注过这一块的东西,所以回答的不是特别好,所以借这一篇文章来回顾总结一下,有需要的朋友,也可以点赞收藏一下,复习一下这方面的知识,为年后的面试做准备. 首先,了解一下什么是事务? --- 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确

spring的事务操作

我们项目一期已经差不多结束了,所以一些细节也被拿了出来,出现最多的就是事务的操作了.因为自己负责的是一个模块(因为是另外一个项目的负责人),所以组员经常会遇到事务的问题,会出现很多奇葩的用法,各种乱用,估计他们就知道在方法上面注解@Transactional,但是其中的很多细节都不知道.所以经常会出现一个情况,就是一大坨代码出现了事务的问题,然后我就去各种改.所以今天也对事务做一个总结吧.以后忘记了可以回来看看. 一般我们使用事务最主要注重的是三个方面: 1.propagation:传播性  

Spring之事务操作(注解)

事务操作步骤: <!-- 第一步.配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <

如何处理Spring、Ibatis结合MySQL数据库使用时的事务操作

Ibatis是MyBatis的前身,它是一个开源的持久层框架.它的核心是SqlMap--将实体Bean跟关系数据库进行映射,将业务代码和SQL语句的书写进行分开.Ibatis是"半自动化"的ORM持久层框架.这里的"半自动化"是相对Hibernate等提供了全面的数据库封装机制的"全自动化"ORM实现而言的,"全自动"ORM实现了POJO与数据库表字段之间的映射并且实现了SQL的自动生成和执行.而Ibatis的着力点,则在于P

spring(三) spring事务操作

前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTemplate? spring提供用于操作数据库模版,类似Dbutils,通俗点讲,我们操作数据库,spring也会帮我们提供一个操作数据库的工具供我们使用,而不用我们自己手动编写连接数据库,获取结果集等等操作,这个工具就是JdbcTemplate.跟Dbutils一样,想要使用JdbcTemplate

spring学习(三) ———— spring事务操作

前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTemplate? spring提供用于操作数据库模版,类似Dbutils,通俗点讲,我们操作数据库,spring也会帮我们提供一个操作数据库的工具供我们使用,而不用我们自己手动编写连接数据库,获取结果集等等操作,这个工具就是JdbcTemplate.跟Dbutils一样,想要使用JdbcTemplate

Java框架spring学习笔记(十八):事务操作

事务操作创建service和dao类,完成注入关系 service层叫业务逻辑层 dao层单纯对数据库操作层,在dao层不添加业务 假设现在有一个转账的需求,狗蛋有10000元,建国有20000元,狗蛋向建国转账1000元钱. 编写service层创建业务逻辑,OrderService.java 1 import cn.dao.OrderDao; 2 3 public class OrderService { 4 private OrderDao orderDao; 5 6 public voi

Spring的事务机制

JAVA EE传统事务机制 通常有两种事务策略:全局事务和局部事务.全局事务可以跨多个事务性资源(即数据源,典型的是数据库和消息队列),通常都需要J2EE应用服务器的管理,其底层需要服务器的JTA支持.而局部事务则与底层采用的持久化技术有关,如果底层直接使用JDBC,需要用Connection对象来操事务.如果采用Hibernate持久化技术,则需要使用session对象来操作事务. 通常的,使用JTA事务,JDBC事务及Hibernate事务的编程流程大致如下, 上图也可以看出,采用传统事务编

Spring框架事务支持模型的优势

全局事务 全局事务支持对多个事务性资源的操作,通常是关系型数据库和消息队列.应用服务器通过JTA管理全局性事务,API非常烦琐.UserTransaction通常需要从JNDI获取,意味着需要与JNDI绑定在一起,且JTA一般只在应用服务器可用,降低了应用代码的可重用性. 本地事务 本地事务面向具体的资源,例如与JDBC连接关联的事务.本地事务易于使用,但不能跨多个事务性资源.使用JDBC管理事务的代码不能在全局JTA事务中运行,因此不能确保跨多个资源的正确性.且本地事务侵入了编程模型. Spr