一、什么事务
事务
是数据库操作的基本单元,也就说逻辑上的一组操作,要么都成功,如果有一个失败操作则全都失败。
二、事务的四个特性(ACID)
原子性
要么都成功,要么都失败
一致性
操作之前和操作之后总量不变
隔离性
多事务操作时不过会相互产生影响
持久性
提交之后数据库中会发生改变
三、准备环节
1、创建数据库
1 | SET NAMES utf8mb4; |
2、Service And Dao
创建Service,搭建Dao,完成对象创建和注入关系
service注入dao,在dao注入JdbcTemplate,在JdbcTemplate注入DataSource
service
1
2
3
4
5
6
public class UserService {
//注入Dao
private UserDao userDao;
}dao
1
2public interface UserDao {
}1
2
3
4
5
public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate;
}bean.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14<!-- 组件扫描 -->
<context:component-scan base-package="com.atguigu"></context:component-scan>
<!-- 数据库连接池配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="url" value="jdbc:mysql://ip:3306/user_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
<!-- JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
3、创建方法
在dao中创建两个方法
1
2
3
4
5
6
7
8
9
10
11
12
13//多钱
public void add() {
String sql = "update t_account set money = money + ? where username = ?";
jdbcTemplate.update(sql, 100, "mary");
}
//少钱
public void reduce() {
String sql = "update t_account set money = money - ? where username = ?";
jdbcTemplate.update(sql, 100, "lucy");
}在service添加如下方法模拟转账
1
2
3
4
5
6
7//模拟转账的方法
public void accountMoney() {
//lucy少100
userDao.reduce();
//mary多100
userDao.add();
}添加测试方法
1
2
3
4
5
6
public void testAccount() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userService", UserService.class);
userService.accountMoney();
}