Spring入门之通过注解 处理 数据库事务
用Spring 中的事务写的银行转帐的例子:(环境同上一个贴子)
一、表结构: (create table (id int,username varchar(10),salary int);)

二、文件列表:
OrdersDao.java OrdersService Test.java 和beans2.xml
(要点):1、要在需要处理事务的类前面加上 @Transactional ,表示引入事务注解

2、在配置 文件 中,配置c3p0连接池,配置dataSource ,通过配置文件创建事务管理器对象,开启事务注解
<!-- 1 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="DriverClass" value ="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/user"></property>
<property name="user" value="root"></property>
<property name="password" value=""></property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 、开启配置事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
全部代码如下:
OrdersDao.java
package spring.dao;
import org.springframework.jdbc.core.JdbcTemplate;
public class OrdersDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void lessMoney() {
String sql = "update salary set salary=salary - ? where username=?";
jdbcTemplate.update(sql,1000,"zhangs");
}
public void moreMoney() {
String sql = "update salary set salary=salary + ? where username=?";
jdbcTemplate.update(sql,1000,"wangs");
}
}
/*
*对数据库操作的方法,不写业务操作;
*/
OrdersService.java
package spring.service; import org.springframework.transaction.annotation.Transactional; import spring.dao.OrdersDao; @Transactional
public class OrdersService {
private OrdersDao ordersDao; public void setOrdersDao(OrdersDao ordersDao) {
this.ordersDao = ordersDao;
}
public void acount() {
//调用DAO的方法
//业务逻辑层,写转帐业务
//zhangs 少1000 //wangs多1000
ordersDao.moreMoney();
int s = 10/0;
ordersDao.lessMoney();
}
}
package spring.service; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TettApi {
@Test
public void testDemo() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans2.xml");
OrdersService ordersService = (OrdersService) context.getBean("ordersService");
ordersService.acount();
} }
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 1配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="DriverClass" value ="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/user"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- 2 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 3、开启配置事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <bean id="ordersDao" class="spring.dao.OrdersDao" >
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean> <bean id="ordersService" class="spring.service.OrdersService">
<property name="ordersDao" ref="ordersDao"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
最后一个是beans2.xml配置文件。
事务一般是成批处理数据库时用到,成组成批执行命令,要不全执行,要么全部不执行。防止有意外事件,造成上面的数减了,下面的数没有加上;(银行转帐例子);
Spring入门之通过注解 处理 数据库事务的更多相关文章
- spring入门3-jdbcTemplate简单使用和声明式事务
1.JdbcTemplate简单使用 1.1.引入相关依赖包 <dependency> <groupId>mysql</groupId> <artifactI ...
- spring入门(二) 使用注解代替xml配置
1.导包(略) 2.applicationContext.xml如下: <?xml version="1.0" encoding="UTF-8"?> ...
- 数据库事务中的隔离级别和锁+spring Transactional注解
数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...
- [转]数据库事务中的隔离级别和锁+spring Transactional注解
数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...
- Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制
Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...
- Spring入门5.事务管理机制
Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...
- Spring Boot 2.x基础教程:事务管理入门
什么是事务? 我们在开发企业应用时,通常业务人员的一个操作实际上是对数据库读写的多步操作的结合.由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻 ...
- 【Spring Framework】Spring入门教程(三)使用注解配置
本文主要介绍四个方面: (1) 注解版本IOC和DI (2) Spring纯注解 (3) Spring测试 (4) SpringJDBC - Spring对数据库的操作 使用注解配置Spring入门 ...
- 开涛spring3(9.1) - Spring的事务 之 9.1 数据库事务概述
9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...
随机推荐
- 获取配置文件中的key的value
获取App.config文件的key的value System.Configuration.ConfigurationManager.AppSettings["keyName"] ...
- 计算两个经纬度之间的距离(python算法)
EARTH_REDIUS = 6378.137 def rad(d): return d * pi / 180.0 def getDistance(lat1, lng1, lat2, lng2): r ...
- csharp 面向对象编程
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Shap ...
- 【AS3 Coder】任务四:噪音的魅力(中)
如果把Math.random方法作为一个生成随机数字的办法,那么bitmapData.perlinNoise就是一个生成随机颜色的办法.在这一部分的对于噪声的应用介绍文章中我们一起来看看使用柏林噪声的 ...
- pycharm2016序列号失效问题解决办法
1.首先修改配置文件 Linux在/etc/hosts windows的话没记错应该在C:\Windows\System32\drivers\etc\hosts 使用时需要将“0.0.0.0 acco ...
- Unity3D之高级渲染-Shader Forge增强版
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家.特邀编辑.畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- docker 安装 gogs(go git server) 及问题解决
docker安装gogs 参考官方说明 gogs mysql 支持 运行一个mysql image docker run --name gogs-mysql -e MYSQL_ROOT_PASSWOR ...
- perl学习笔记——正则表达式
正则表达式 简单模式:匹配$_中的内容,只需要将模式写在一对斜线(/)中就可以了. 如:#!/usr/bin/env perl use 5.010; $_="yabba dabba doo& ...
- HDU 2191悼念512汶川大地震遇难同胞——珍惜如今,感恩生活(多重背包)
HDU 2191悼念512汶川大地震遇难同胞--珍惜如今.感恩生活(多重背包) http://acm.hdu.edu.cn/showproblem.php?pid=2191 题意: 如果你有资金n元, ...
- rpm安装找不到.so库文件(linux动态库连接的相关知识)(转)
1.找不到库文件的原因 库文件不存在 这种情况一般是因为所需要的包没装,只要安装相应的包就可以解决 存在而系统不知道 这种情况一般出现在自己编译软件时候 确保库文件所在的路径已加入系统,在/etc/l ...