事物是用来做什么的?
主要是对数据库进行事务管理,spring的事务主要用来管理spring所加载的ORM(Hibernate、Mybatis、MybatisPlus。。。)框架
1、@Transactional(这里是对事物的一些描述属性)标识
2、spring在启动的时候回解析生成bean,这个过程会检测拥有相关注解的类和方法,同时给带有此事务的类或方法生成相应的代理
关于@Transaction的注解属性都有哪些:
value:可选的限定描述符,指定使用的事务管理器
Propagation:可选的事务传播行为设置
isolation:可选的事务隔离级别设置
readOnly:读写或只读事务
Timeout:事务超时时间设置,单位:ms(毫秒)
rollbackFor:导致事务回滚的异常类名字数组
oRollbackFor:不会导致事务回滚
noRollbackForClassName:不会导致事务回滚的异常类名字数组
Propagation各属性值的含义:
1、propagation=REQUIRED:如果有事务,那么加入事务,没有的话创建一个事务
2、propagation=NOT_SUPPORTED:这个方法不开启事务
3、propagation=REQUIREDS_NEW:不管有无事务的存在,都创建一个新的事务来执行,原来的事务挂起
4、propagation=MANDATORY:必须在一个已有的事务中执行
5、propagation=NEVER:不能在一个事务中执行,就是当前必须没有事务,否则抛出异常
6、propagation=SUPPORTS:当前存在事务,则在事务中运行,否则以非事务的形态进行运行
7、propagation=NESTED:若有当前存在事务,则在运行一个嵌套的事务,如果当前没有事务,则按照REQUIRED 的方式来执行
isolation:各属性值的含义
1、TransactionDefinition.ISOLATION_DEFAULT:这是一个默认值,表示使用底层数据库的默认隔离级别
2、TransactionDefinition.ISOLATION_READ_UNCOMMITTED:改隔离级别表示一个事务可以读取另一个事务修改但没有提交的数据,该级别不能防止脏读数据,不可重复读和幻读,因此很少使用该隔离级别
3、TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据,该级别可以防止脏读,这也是大多数情况下的推荐属性。(经常使用的属性)
4、TransactionDefinition.ISOLATION_REPEATABLE_READ:该事物隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同,该级别可以防止脏读和不可重复读
5、TransactionDefinition.ISOLATION_SERIAIIABLE:所有的事务一次逐个执行,这样事务之间就完全不可能进行干扰,也就是说,该级别可以防止脏读,不可重复读及幻读,但是这将影响到程序的运行程序,通常情况下也会用到该级别
名词解释:
1、脏读:当事务读取还未被提交的数据时,就会发生这种事件:例子:徐同学在北京修改了一条数据,(未提交),旭同学在长春查到了(该数据不可靠)
2、幻读:就是读到了历史数据,即使此数据已经被修改了,那么也会读到被修改前的这条数据