1.1 项目目录(xml配置)
1.2 spring事务管理
事务定义
事务(transaction)一般是指要做的或者所做的事情。在程序中,尤其是在操作数据库的程序中,指的是访问并且可能更新数据库中数据项的一个执行单元。
这个执行单元由事务开始(begin transaction)和事务结束(end transaction)之间执行的全部操作组成。
事务ACID原则
事务具有4个基本特性:原子性、一致性、隔离性、持久性。也就是我们常说的ACID原则
原子性(Atomicity)
- 一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做
一致性(Consistency)
- 事务必须是使得数据库状态从一个一致性状态,转变到另外一个一致性状态。也就是说在事务前,和事务后,被操作的目标资源状态一致。
比如银行转账案例中,转账前和转账后,总账不变。
隔离性(Isolation)
- 一个事务的执行不能被其他事务的影响。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,多个并发事务之间不能相互干扰。
持久性(Durability)
- 一个事务一旦提交,它对数据库中数据的改变会永久存储起来其他操作不会对它产生影响。
1.3 代码示例
数据表
-- 创建账户表
create table account(
id int primary key auto_increment,
name varchar(40),
money float
)ENGINE=InnoDB character set utf8 collate utf8_general_ci;
-- 初始化新增三个账户
insert into account(name,money) values('kebe',1000);
insert into account(name,money) values('curry',1500);
insert into account(name,money) values('james',2000);
select * from account;
编写实体类
package cn.guardwhy.domain;
/**
* 账户实体类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Account {
// 成员变量
private int id;
private String name;
private Float money;
}
结果集映射类
package cn.guardwhy.rowmapper;
import cn.guardwhy.domain.Account;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 账户结果集映射类
*/
public class AccountRowMapper implements RowMapper<Account>{
/**
*每一行记录,调用一次该方法
*/
public Account mapRow(ResultSet rs, int index) throws SQLException {
// 创建Account
Account account = new Account();
account.setId(rs.getInt("id"));
account.setName(rs.getString("name"));
account.setMoney(rs.getFloat("money"));
return account;
}
}
持久层(Dao)
dao接口
package cn.guardwhy.dao;
import cn.guardwhy.domain.Account;
/**
* 账户dao接口
*/
public interface AccountDao {
/**
* 根据账户id查询账户
*/
Account findAccountById(Integer accountId);
/**
* 根据账户名称查询账户
*/
Account findAccountByName(String accountName);
/**
* 更新账户
*/
void updateAccount(Account account);
}
AccountDaoImpl
package cn.guardwhy.dao.impl;
import cn.guardwhy.dao.AccountDao;
import cn.guardwhy.domain.Account;
import cn.guardwhy.rowmapper.AccountRowMapper;
import org.springframework.jdbc.core.Jdb