1.spring事务的实现方式
spring框架提供了两种事务的实现方式:编程式事务、声明式事务
编程式事务:在代码中进行事务控制。优点:精确度高。缺点:代码高耦合。
声明式事务:通过@Transactional注解实现事务控制
2.spring事务的底层原理
事务的操作原本是由数据库来控制,但是为了用户进行业务逻辑控制,spring对事务功能进行扩展实现。一般我们我们很少去用编程式事务,更多的是使用@Transactional注解来实现。当使用@Transactional注解后事务的自动功能就会关闭,有spring帮助实现事务管理。
spring的事务管理是通过AOP的代理来实现的,在方法上加上@Transactional注解后,spring会基于这个类生成一个代理对象,会将这个类的代理对象作为bean对象,当使用这个代理对象执行方法时,如果方法上存在@Trancational注解后,那么代理逻辑会把事务自动提交设置为false,然后再去执行原本的业务逻辑方法,如果执行业务逻辑方法没有出现异常,那么代理逻辑就会把事务提交,如果业务逻辑出现异常,那么则会将事务进行回滚。
3.spring事务的隔离级别
Isolation.DEFAULT:使用各个数据库默认的隔离级别【默认】
Isolation.READ_UNCOMMITTED:读取未提交数据(会出现脏读, 不可重复读)(基本不使用)
Isolation.READ_COMMITTED:读取已提交数据(会出现不可重复读和幻读)
Isolation.REPEATABLE_READ:可重复读(会出现幻读)
Isolation.SERIALIZABLE:串行化