spring笔记4-事务管理

一.xml配置文件形式

通过转账案例,学习事务管理

1.建立数据库

2.编写entity

  1 package huguangqin.com.cnblogs.entity;
  2
  3 public class User {
  4      private Integer id;
  5      private String name;
  6      private Double money;
  7
  8     public User() {
  9          super();
 10      }
 11
 12     public User(Integer id, String name, Double money) {
 13          super();
 14          this.id = id;
 15          this.name = name;
 16          this.money = money;
 17      }
 18
 19     public Integer getId() {
 20          return id;
 21      }
 22
 23     public void setId(Integer id) {
 24          this.id = id;
 25      }
 26
 27     public String getName() {
 28          return name;
 29      }
 30
 31     public void setName(String name) {
 32          this.name = name;
 33      }
 34
 35     public Double getMoney() {
 36          return money;
 37      }
 38
 39     public void setMoney(Double money) {
 40          this.money = money;
 41      }
 42
 43 }
 44 

3.编写dao

  1 package huguangqin.com.cnblogs.dao;
  2
  3 public interface UserDao {
  4      void increasement(int id, double money);
  5
  6     void decreasement(int id, double money);
  7  }
  8 

4.编写daoImpl

  1 package huguangqin.com.cnblogs.daoImpl;
  2
  3 import org.springframework.jdbc.core.support.JdbcDaoSupport;
  4
  5 import huguangqin.com.cnblogs.dao.UserDao;
  6
  7 public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
  8
  9     @Override
 10      public void increasement(int id, double money) {
 11          String sql = "update t_bank set money=money+? where id = ?";
 12          getJdbcTemplate().update(sql, money, id);
 13      }
 14
 15     @Override
 16      public void decreasement(int id, double money) {
 17          String sql = "update t_bank set money=money-? where id = ?";
 18          getJdbcTemplate().update(sql, money, id);
 19      }
 20
 21 }
 22 

5.编写service

  1 package huguangqin.com.cnblogs.service;
  2
  3 public interface IUserService {
  4      void tranfer(int where, int to, double money);
  5  }
  6 

6.编写serviceImpl

  1 package huguangqin.com.cnblogs.serviceImpl;
  2
  3 import org.springframework.beans.factory.annotation.Autowired;
  4
  5 import huguangqin.com.cnblogs.dao.UserDao;
  6  import huguangqin.com.cnblogs.service.IUserService;
  7
  8 public class UserServiceImpl implements IUserService {
  9      //调用UserDao操作数据库,spring下调用接口,并注入实例对象
 10     @Autowired
 11      private UserDao ud;
 12
 13     public void setUd(UserDao ud) {
 14          this.ud = ud;
 15      }
 16
 17     @Override
 18      public void tranfer(int where, int to, double money) {
 19         ud.decreasement(where, money);
 20          ud.increasement(to, money);
 21      }
 22  }
 23 

7.编写db.properties

  1 jdbc.driverClass=com.mysql.jdbc.Driver
  2 jdbc.url=jdbc:mysql:///spring_day02
  3 jdbc.user=root
  4 jdbc.password=root

8.编写applicationContext.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2
  3 <beans
  4  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5  xmlns="http://www.springframework.org/schema/beans"
  6  xmlns:context="http://www.springframework.org/schema/context"
  7  xmlns:aop="http://www.springframework.org/schema/aop"
  8  xmlns:tx="http://www.springframework.org/schema/tx"
  9  xsi:schemaLocation="http://www.springframework.org/schema/beans
 10                      http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
 11                      http://www.springframework.org/schema/context
 12                      http://www.springframework.org/schema/context/spring-context-4.2.xsd
 13                      http://www.springframework.org/schema/aop
 14                      http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
 15                      http://www.springframework.org/schema/tx
 16                      http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
 17
 18  <!--读取db.propertiey  -->
 19  <context:property-placeholder location="classpath:db.properties"/>
 20
 21 <!-- 配置连接池到spring容器 -->
 22  <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 23      <property name="driverClass" value="${jdbc.driverClass}"></property>
 24      <property name="jdbcUrl" value="${jdbc.url}"></property>
 25      <property name="user" value="${jdbc.user}"></property>
 26      <property name="password" value="${jdbc.password}"></property>
 27  </bean>
 28
 29 <!-- 配置核心事务管理器 -->
 30  <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 31      <property name="dataSource" ref="dataSource"></property>
 32  </bean>
 33
 34 <!-- 配置事务管理通知 -->
 35  <tx:advice id="txAdvice" transaction-manager="transactionManager">
 36      <tx:attributes>
 37          <tx:method name="*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
 38          <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
 39          <tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
 40      </tx:attributes>
 41  </tx:advice>
 42
 43 <!-- 配置织入 -->
 44  <aop:config>
 45      <aop:pointcut expression="execution(* huguangqin.com.cnblogs.serviceImpl.*ServiceImpl.*(..))" id="txPc"/>
 46  </aop:config>
 47
 48 <!-- 配置dao -->
 49  <bean name="userDao" class="huguangqin.com.cnblogs.daoImpl.UserDaoImpl">
 50      <property name="dataSource" ref="dataSource"></property>
 51  </bean>
 52
 53 <!-- 配置service -->
 54  <bean name="userService" class="huguangqin.com.cnblogs.serviceImpl.UserServiceImpl">
 55      <property name="ud" ref="userDao"></property>
 56  </bean>
 57  </beans>
 58 

二.Annotation形式

与xml相比需修改以下文件

1.applicationContext.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2
  3 <beans
  4  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5  xmlns="http://www.springframework.org/schema/beans"
  6  xmlns:context="http://www.springframework.org/schema/context"
  7  xmlns:aop="http://www.springframework.org/schema/aop"
  8  xmlns:tx="http://www.springframework.org/schema/tx"
  9  xsi:schemaLocation="http://www.springframework.org/schema/beans
 10                      http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
 11                     http://www.springframework.org/schema/context
 12                      http://www.springframework.org/schema/context/spring-context-4.2.xsd
 13                      http://www.springframework.org/schema/aop
 14                      http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
 15                      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
 16
 17  <!--读取db.propertiey  -->
 18  <context:property-placeholder location="classpath:db.properties"/>
 19
 20 <!-- 配置连接池到spring容器 -->
 21  <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 22      <property name="driverClass" value="${jdbc.driverClass}"></property>
 23      <property name="jdbcUrl" value="${jdbc.url}"></property>
 24      <property name="user" value="${jdbc.user}"></property>
 25      <property name="password" value="${jdbc.password}"></property>
 26 </bean>
 27
 28 <!-- 配置核心事务管理器 -->
 29  <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 30      <property name="dataSource" ref="dataSource"></property>
 31  </bean>
 32
 33 <!--开启注解管理事务开关  -->
 34  <tx:annotation-driven transaction-manager="transactionManager"/>
 35
 36 <!-- 配置dao -->
 37  <bean name="userDao" class="huguangqin.com.cnblogs.daoImpl.UserDaoImpl">
 38      <property name="dataSource" ref="dataSource"></property>
 39  </bean>
 40
 41 <!-- 配置service -->
 42  <bean name="userService" class="huguangqin.com.cnblogs.serviceImpl.UserServiceImpl">
 43      <property name="ud" ref="userDao"></property>
 44  </bean>
 45  </beans>
 46 

2.serviceImpl类

  1 package huguangqin.com.cnblogs.serviceImpl;
  2
  3 import org.springframework.beans.factory.annotation.Autowired;
  4  import org.springframework.transaction.annotation.Transactional;
  5
  6 import huguangqin.com.cnblogs.dao.UserDao;
  7  import huguangqin.com.cnblogs.service.IUserService;
  8
  9 @Transactional
 10  public class UserServiceImpl implements IUserService {
 11      @Autowired
 12      private UserDao ud;
 13
 14     public UserDao getUd() {
 15          return ud;
 16      }
 17
 18     public void setUd(UserDao ud) {
 19          this.ud = ud;
 20      }
 21
 22     @Override
 23      // @Transactional(isolation = Isolation.DEFAULT, propagation =Propagation.REQUIRED, readOnly = false)
 24      public void tranfer(int where, int to, double money) {
 25          ud.decreasement(where, money);
 26          ud.increasement(to, money);
 27      }
 28
 29 }
 30 
时间: 2024-10-27 18:07:23

spring笔记4-事务管理的相关文章

Spring对Hibernate事务管理【转】

在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,我们这样做的原因是因为Hibernate默认的事务自动提交是false,他是需要我们人为的手动提交事务,假如你不想每次都手动提交事务的话,你可以在hibernate.cfg.xml我文件中把它设置为事务自动提交: <property name="hibernate

Spring声明式事务管理(基于注解方式实现)

----------------------siwuxie095 Spring 声明式事务管理(基于注解方式实现) 以转账为例 1.导入相关 jar 包(共 10 个包) (1)导入核心 jar 包和日志相关的 jar 包 (2)导入 JdbcTemplate 的 jar 包 (3)导入 MySQL 的 JDBC 驱动包 mysql-connector-java 下载链接: https://dev.mysql.com/downloads/connector/j/ (4)导入 AOP 的 jar

spring 声明式事务管理

简单理解事务: 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都不执行.如果银行卡扣除了1000块但是ATM出钱失败的话,你将会损失1000元:如果银行卡扣钱失败但是ATM却出了1000块,那么银行将损失1000元.所以,如果一个步骤成功另一个步骤失败对双方都不是好事,如果不管哪一个步骤失败了以后,整个取钱过程都能回滚,也就是完全取消所有操作的话,这对双方都是极好的. 当这两个步骤提交了,执行完毕

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

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

Spring框架的事务管理及应用

Spring框架简介 Spring框架是一个2003年2月才出现的开源项目,该开源项目起源自Rod Johnson在2002年末出版的<Expert One-on-One J2EE Design and Development>一书中的基础性代码.在该书中,Rod Johnson倡导J2EE实用主义的设计思想,而Spring框架正是这一思想的更全面和具体的实现.Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务.持久化和Web用户接口提供的服务组成.作为一种轻量级的J2E

Spring中的事务管理

一.Spring事务管理用到的三个接口 a. PlatformTransactionManager 事务管理器 b. TransactionDefinition 事务定义信息(隔离.传播.超时.只读) c. TransactionStatus 事务具体的运行状态 二.Spring为不同的持久化框架提供了不同的PlatformTransactionManager接口实现 事务 说明 org.springframework.jdbc.datasource.DataSourceTransactionM

Spring对Hibernate事务管理

谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中 我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,我们这样做的原因是因为Hibernate默认的事务自 动提交是false,他是需要我们人为的手动提交事务,假如你不想每次都手动提交事务的话,你可以在hibernate.cfg.xml我文件中把它设置 为事务自动提交: <property name="hiberna

Spring声明式事务管理与配置介绍

转至:http://java.9sssd.com/javafw/art/1215 [摘要]本文介绍Spring声明式事务管理与配置,包括Spring声明式事务配置的五种方式.事务的传播属性(Propagation).Spring事务的隔离级别(Isolation level)等内容. 一.Spring声明式事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把

使用Spring配置文件实现事务管理

前面我们讲解了使用Spring注解方式来管理事务,现在我们就来学习使用Spring配置文件实现事务管理.本文是建立在使用Spring注解方式管理事务与传播行为详解案例基础之上的. 首先我们在cn.itcast.service.impl包下再新建一个业务bean——PersonServiceBean2.java,其代码为: /** * 使用JdbcTemplate进行insert/update/delete/select操作 * @author li ayun * */ public class

Spring+mybatis中事务管理

spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务管理,spring推荐使用TransactionTemplate. 显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式.声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持.和编程式事务相比,声明式事务唯一不足地方是,后者的最