首页 > 编程知识 正文

spring注解大全,持久层注解

时间:2023-05-05 19:23:28 阅读:106039 作者:4011

1、Transactional @Transactional是spring中声明式事务管理的注释放置方式,相信大家都很熟悉此注释的作用。 @Transactional注释有助于aop管理事务的打开、提交或回滚操作。 @Transactional注释允许spring管理事务,从而消除重复的事务管理逻辑,减少对业务代码的入侵,使开发人员可以专注于业务级的开发。

Transactional注释中的字段

事物传播行为介绍:

@ transactional (propagation=propagation.required ) :如果有事务,则添加事务,否则默认为spring创建新的默认传播行为

@ transactional (propagation=propagation.not _ supported ) :容器不会为此方法打开事务

@ transactional (propagation=propagation.requires _ new ) :创建新事务,无论是否存在事务。 原始挂起,新执行完成,继续旧事务

@ transactional (propagation=propagation.mandatory ) :必须在现有事务中执行。 如果不执行,则会抛出异常

@ transactional (propagation=propagation.never ) :必须在空无一物的事务中执行。 否则抛出异常(与Propagation.MANDATORY相反)。

@ transactional (propagation=propagation.supports ) :如果其他bean调用此方法并希望其他bean声明事务,请使用事务。 如果其他bean没有声明事务,则不使用事务。

超时设定:

@transactional(timeout=30 ) /默认值为30秒

事务隔离级别:

@ transactional (isolation=isolation.read _ uncommitted ) :几乎不使用读取未提交的数据(发生脏读,无法重复读取)

@ transactional (isolation=isolation.read _ committed ) :读取提交的数据(发生不可重复和幻读) ) )

@ transactional (isolation=isolation.repeatable _ read ) :可重复读取(出现幻读) )

@ transactional (isolation=isolation.serializable ) :序列化

MYSQL:的缺省值是REPEATABLE_READ级别

SQLSERVER:的缺省值为READ_COMMITTED

Oracle的默认隔离级别READ_COMMITTED

3、isolation详细理解isolation的参数有以下5种。

1_1,Isolation.DEFAULT:是数据源的默认隔离级别

1_2,isolation=isolation.read _ uncommitted 3360非法读取级别

假设要处理同一行中的数据,读取事务允许其他读取事务和写入事务,而未提交的写入事务禁止其他写入事务。 但是,允许其他读取事务。 此隔离级别可以防止更新丢失,但不能防止脏读、不可重复读或幻读。 该隔离级别可以通过“独占写锁定”实现。

1_3、iIsolation.READ_COMMITTED:许可证读取级别

在操作同一行中的数据的前提下,读取事务允许其他读取事务和写入事务,而未提交的写入事务禁止其他读取事务和写入事务。 此隔离级别可以防止更新丢失、脏读,但不能防止不可重复的读取和幻读。 隔离级别可以通过“即时共享读锁定”和“独占写锁定”来实现。

1_4、iisolation.repeatable _ read :可重复读取级别

在处理同一行中的数据的前提下,读取事务禁止其他写入事务,而未提交的写入事务禁止其他读取事务和写入事务。 隔离级别可以防止更新丢失、脏读和不可重复读,但不能防止幻读。 可以通过“共享读锁定”和“独占写锁定”实现此隔离级别。

1_5、iIsolation.SERIALIZABLE:序列化级别

提供严格的事务隔离。 必须序列化事务以执行它。 一个事务只能执行一个,不能同时执行。 隔离级别可防止更新丢失、脏读、不可重复读和幻读。 如果事务不能仅通过行级锁进行序列化,则必须确保刚执行查询操作的事务不会访问新插入的数据。

隔离级别越高,越能保证数据的完整性和一致性,但对并发性能的影响也越大。 在大多数APP应用程序中,可以将数据库系统的隔离级别设置为Read Committed。 避免了更新的丢失、脏读,同时性优异。 这可能会导致不可重复的读取、幻读等并行问题,但在可能出现这些问题的个别情况下,可以使用悲观锁定或乐观锁定来控制APP断开。

有关事务处理的关键字说明如下。

原子性:

事务是数据库的逻辑工作单元,可以对数据库进行所有更改或更改

,要么全部不执行。

一致性(Consistemcy):

事务前后,数据库的状态都满足所有的完整性约束。

隔离性(Isolation):

并发执行的事务是隔离的,一个不影响一个。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。通过设置数据库的隔离级别,可以达到不同的隔离效果。

持久性(Durability):

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

更新丢失:

两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。

脏读:

脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。

例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的数据就是脏的。

不可重复读:

不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。

例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

幻读:

事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据

例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。这就叫幻读。

以上的4种问题(更新丢失、脏读、不可重复读、幻读)都和事务的隔离级别有关。通过设置事务的隔离级别,可以避免上述问题的发生。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。