spring---数据库连接池druid进行数据库操作、事务回滚

目录

  1. 使用数据库连接池druid进行数据库操作
  2. 数据库事务异常回滚----配置方式和注解方式
  3. 附:开启 spring 的所有注解支持

一、使用数据库连接池druid进行数据库操作

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


	
		
	

使用依赖注入,让数据库连接池引用我们配置好的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.事务回滚-----配置方式实现

1)引进 spring 整合 jdbc 的 jar 包后,在命名空间中勾选事务相关的约束
spring---数据库连接池druid进行数据库操作、事务回滚_第1张图片
2)将事务管理器注册到spring容器中


	
		//事务管理和操作都是对同一数据源
	

加上配置


	
		
			//这里有个*号
			
		
	
	
	
	
		
	

3)在对数据库的两次操作之间加个异常代码:
spring---数据库连接池druid进行数据库操作、事务回滚_第2张图片数据库中1号用户余额从150变成180,而3号用户仍然是680
spring---数据库连接池druid进行数据库操作、事务回滚_第3张图片
4)将transfer方法改为transferTx后,数据库事务实现了异常回滚功能。
spring---数据库连接池druid进行数据库操作、事务回滚_第4张图片

2.事务回滚----注解方式实现

1)提供事务管理器

 
	
		
	

在spring容器中开启事务控制注解支持:


	

2)在类上面加上@transactional, 那么这个类所有方法都会开启事务控制
如果在方法上面加上@transactional,表示对单个方法开启事务控制(类上面的注解则删掉)即可。
spring---数据库连接池druid进行数据库操作、事务回滚_第5张图片

三、开启 spring 的所有注解支持:


	

	
	

	
	

你可能感兴趣的:(Spring)