Spring之事务操作(注解)

事务操作步骤:

    <!-- 第一步、配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 第二步、开启事务的注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
    <!-- 第三步、在事务类上添加注解
    @Transactional
    public class UserSerivce {  -->

举例如下:

UserDao.java

 1 package helloworld.txZhuJie;
 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 reduce(String name,int num) {
15         // 调用jdbcTemplate对象中的方法实现操作
16         String sql = "update salary set salary = (salary - ?) where name= ?";
17         // 表结构:name(varchar 20),salary(int 20)
18         int rows = jdbcTemplate.update(sql, num, name);
19         System.out.println("修改行数:" + rows);
20     }
21
22     //    增加
23     public void increase(String name,int num) {
24         // 调用jdbcTemplate对象中的方法实现操作
25         String sql = "update salary set salary = (salary + ?) where name= ?";
26         // 表结构:name(varchar 20),salary(int 20)
27         int rows = jdbcTemplate.update(sql, num, name);
28         System.out.println("修改行数:" + rows);
29     }
30
31     //    实现添加操作
32     public void add() {
33         // 调用jdbcTemplate对象中的方法实现操作
34         String sql = "insert into salary value(?,?)";
35         // 表结构:name(varchar 20),salary(int 20)
36         int rows = jdbcTemplate.update(sql, "Tom", 10000);
37         System.out.println("插入行数:" + rows);
38         rows = jdbcTemplate.update(sql, "Jerry", 10000);
39         System.out.println("插入行数:" + rows);
40     }
41
42 }

UserSerivce.java

 1 package helloworld.txZhuJie;
 2
 3 import org.springframework.transaction.annotation.Transactional;
 4
 5 //事务操作注解
 6 @Transactional
 7 public class UserSerivce {
 8     private UserDao userDao;
 9
10     public void setUserDao(UserDao userDao) {
11         this.userDao = userDao;
12     }
13
14     public void add(){
15         userDao.add();
16     }
17
18 //    工资调整
19     public void updateAccount(){
20
21         userDao.reduce("Tom",1000);
22
23 //        制造异常
24 //        int n = 100/0;
25
26         userDao.increase("Jerry",1000);
27
28     }
29
30 }

TestTXZhuJie.java

 1 package helloworld.txZhuJie;
 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 * 1、配置事务管理器
12 * 2、配置事务注解
13 * 3、在使用事务的方法所在类上添加注解
14 * */
15 public class TestTXZhuJie {
16     @Before
17     public void beforeRun() {
18         System.out.println("beforeRun");
19     }
20
21 //    插入数据
22     @Ignore
23     @Test
24     public void add() {
25         ApplicationContext context =
26                 new ClassPathXmlApplicationContext("beans_tx_zhujie.xml");
27         UserSerivce userSerivce = (UserSerivce) context.getBean("userSerivce");
28         userSerivce.add();
29     }
30
31     @Test
32     public void update() {
33         ApplicationContext context =
34                 new ClassPathXmlApplicationContext("beans_tx_zhujie.xml");
35         UserSerivce userSerivce = (UserSerivce) context.getBean("userSerivce");
36         userSerivce.updateAccount();
37     }
38
39 }

beans_tx_zhujie.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:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
29     <!-- 第三步、在事务类上添加注解
30     @Transactional
31     public class UserSerivce {  -->
32
33     <!--创建service对象,注入dao对象-->
34     <bean id="userSerivce" class="helloworld.txZhuJie.UserSerivce">
35         <property name="userDao" ref="userDao"></property>
36     </bean>
37
38     <!--创建DAO对象,注入JdbcTemplate对象-->
39     <bean id="userDao" class="helloworld.txZhuJie.UserDao">
40         <property name="jdbcTemplate" ref="jdbcTemplate"></property>
41     </bean>
42
43     <!--创建JdbcTemplate对象,注入连接池dataSource-->
44     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
45         <property name="dataSource" ref="dataSource"></property>
46     </bean>
47
48     <!--引入其它配置文件-->
49     <!--<import resource="classpath:helloworld/zhuru/beans.xml"/>-->
50
51 </beans>

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

时间: 2024-10-08 17:18:51

Spring之事务操作(注解)的相关文章

spring的事务操作(重点)

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

spring的事务操作

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

Spring初学之spring的事务管理注解

spring的事务管理,本文的例子是:比如你需要网购一本书,卖书的那一方有库存量以及书的价格,你有账户余额.回想我们在编程中要实现买书这样的功能,由于你的账户表和书的库存量表肯定不是同一张数据库表,所以必定会有一个先后,要么先将账户余额扣除书的价格,紧接着将书的库存量减一,要么反过来.那么问题来了,假如我们先将你的账户余额减掉,然后发现书的库存不足,这时怎么办呢,这就需要事务了,当我们发现书的库存不足时就要回滚事务,将你的余额返回去.只要配置了事务,发生了异常,就回滚.这就是事务的回滚.注:新人

spring的事务管理注解

软件152班杨锦宏 spring的事务管理,本文的例子是:比如你需要网购一本书,卖书的那一方有库存量以及书的价格,你有账户余额.回想我们在编程中要实现买书这样的功能,由于你的账户表和书的库存量表肯定不是同一张数据库表,所以必定会有一个先后,要么先将账户余额扣除书的价格,紧接着将书的库存量减一,要么反过来.那么问题来了,假如我们先将你的账户余额减掉,然后发现书的库存不足,这时怎么办呢,这就需要事务了,当我们发现书的库存不足时就要回滚事务,将你的余额返回去.只要配置了事务,发生了异常,就回滚.这就是

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 = jdbcTem

spring 声明式事务管理注解方式实现

使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制的地方,写上: @Transactional @Transactional注解: 1)应用事务的注解 2)定义到方法上: 当前方法应用spring的声明式事务 3)定义到类上:   当前类的所有的方法都应用Spring声明式事务管理; 4)定义到父类上: 当执行父类的方法时候应用事务. 案例: 1.

spring框架学习(八)spring管理事务方式之注解配置

1.DAO AccountDao.java package cn.mf.dao; public interface AccountDao { //加钱 void increaseMoney(Integer id,Double money); //减钱 void decreaseMoney(Integer id,Double money); } AccountDaoImpl.java package cn.mf.dao; import org.springframework.jdbc.core.s

spring,mybatis事务管理配置与@Transactional注解使用

spring,mybatis事务管理配置与@Transactional注解使用[转] 概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects) 支持声明式事务管理,特别是基

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

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