一、事务操作(事务概念)
1、什么事务
(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操
作都失败
(2)典型场景:银行转账
- lucy 转账 100 元 给 mary
- lucy 少 100,mary 多 100
2、事务四个特性(ACID)
(1)原子性
(2)一致性
(3)隔离性
(4)持久性
二、事务操作(搭建事务操作环境)
1、创建数据库表,添加记录
CREATE TABLE `t_account` (
`id` varchar(20) NOT NULL,
`username` varchar(50) DEFAULT NULL,
`money` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
2、创建 service,搭建 dao,完成对象创建和注入关系
(1)service 注入 dao,在 dao 注入 JdbcTemplate,在 JdbcTemplate 注入 DataSource
@Service
public class UserService {
//注入dao
@Autowired
private UserDao userDao;
package com.rjs.demo.dao;
public interface UserDao {
//多钱
public void addMoney();
//少钱
public void reduceMoney();
}
package com.rjs.demo.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void reduceMoney() {
}
//多钱
@Override
public void addMoney() {
}
}
3、在 dao 创建两个方法:多钱和少钱的方法,在 service 创建方法(转账的方法)
package com.rjs.demo.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
//lucy转账100给mary
//少钱
@Override
public void reduceMoney() {
String sql = "update t_account set money=money-? where username=?";
jdbcTemplate.update(sql,100,"dark");
}
//多钱
@Override
public void addMoney() {
String sql = "update t_account set money=money+? where username=?";
jdbcTemplate.update(sql,100,"shows");
}
}
package com.rjs.demo.service;
import com.rjs.demo.dao.