目录
1.导包
org.springframework
spring-jdbc
${spring.version}
mysql
mysql-connector-java
8.0.16
com.alibaba
druid
1.1.19
将数据库连接池配置到spring中,即数据库连接交给spring管理
数据库连接池:,管理整个数据库应用中数据库连接线程的各值,最大最小连接数,最大最小闲置数,数据库连接等待时间等 ,节约资源。
2.使用数据库连接池,必须用到数据库连接的配置文件,因此需要在applicationContext.xml文件中引入:
读取配置文件后会将文件中的key作为工程中的key,然后可以通过“$”符号引入如:${jdbc.driverClassName}
jdbc.properties文件:
jdbc.username=root
jdbc.password=**********
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
3.spring整合(阿里)druid连接池的通用配置:
有了数据库连接池通用配合,我们需要spring依据数据库连接池标准封装好的 jdbc 操作模板,可以方便操作数据库连接池 和数据源dataSource
使用依赖注入,
@Repository 数据库层注解,注册到Spring容器中
4.服务层实现类UserServiceImpl.java
@Service //or @Repository(userServiceImpl)
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
//out给in转money
public int transfer(Integer in, Integer out, Double money) {
userDao.addMoney(in, money);
userDao.costMoney(out, money);
return 1;
}
}
主类调用:
public class TxApplication {
public static void main(String [] args) {
ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us = (UserService) ac.getBean("userServiceImpl");
us.transfer(1, 3, 30d);
}
}
数据库中实现3号用户给一号用户转账30.
事物四个特性:
①原子性(Atomic),事务包含的所有操作要么全部成功,要么全部失败回滚;
②隔离性(Durability),当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;
③一致性(Isolation),事务执行前和执行后必须处于一致性状态;
④持久性(Consistency),一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事物的操作。
此处特性的解释引用于网络:https://www.cnblogs.com/melody210218/p/7120559.html
1)引进 spring 整合 jdbc 的 jar 包后,在命名空间中勾选事务相关的约束
2)将事务管理器注册到spring容器中
//事务管理和操作都是对同一数据源
加上配置
//这里有个*号
3)在对数据库的两次操作之间加个异常代码:
数据库中1号用户余额从150变成180,而3号用户仍然是680
4)将transfer方法改为transferTx后,数据库事务实现了异常回滚功能。
1)提供事务管理器
在spring容器中开启事务控制注解支持:
2)在类上面加上@transactional, 那么这个类所有方法都会开启事务控制
如果在方法上面加上@transactional,表示对单个方法开启事务控制(类上面的注解则删掉)即可。