spring快速复习2事务及一些使用到的设计模式

事务管理器
Mybatis(JdbcTeamplate))的事务管理器: DataSourceTransactionManager
Hibernate事务管理器:HibernateTransactionManager
事务的基本特性(ACID)
原子性:一个事务要么都提交要么都不提交

一致性:AB转账事务提交后总金额不发生改变

隔离性:事务隔离级别
	read uncommitted 读未提交
	存在:脏读 不可重复读 幻读
		读取了另一个事务未提交的数据
	read committed读已提交
	存在:不可重复读 幻读
	解决了脏读 读已提交,一个事务读到另一个事务已经提交的数据。
	repeatable read:可重复读
	存在: 幻读,针对  insert操作
	一个事务中读到的数据始终保持一致,无论另一个事务是否提交
	serializable:串行化
	只能执行一个事务
持久性:一个事务一旦提交,它对数据库中数据的改变应该是永久性的

事务的传播 方法A 调用方法B AB中的事务的传播
@Transactional(propagation(传播) = Propagation.REQUIRED)
REQUIRED:没有事务创建 有加入事务
SUPPORTS:有事务就用没有就不用
一般情况下,生产环境中都是使用默认的Required
只读事务:优化手段
@Transactional(readOnly = true)用于查询
重点 声明事务
事务管理器 数据源 切面(切点+增强)
xml配置事务:
//事务管理器

//数据源

	//配置增强处理
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!--
			<tx:method > 标签作用:批量设置切入点方法的事务属性
			name属性:指定业务层的方法名称,可以使用*通配符
			propagation属性:事务的传播行为,默认REQUIRED,可以省略
			isolation属性:事务的隔离级别,默认使用数据库的隔离级别,可以省略
			read-only属性:是否只读事务,默认为false,可以不填
			-->
			<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
			<tx:method name="select*" read-only="true" propagation="SUPPORTS"/>
			<tx:method name="*"></tx:method>
		</tx:attributes>
	</tx:advice>
	
	<!--配置AOP声明式事务 配置切面 引入切点和增强处理-->
	<aop:config>
		<!--
		配置aop的通知增强
		advice-ref属性:设置外部标签的通知增强
		pointcut属性:配置切入点(切入点表达式)
		-->
		<aop:advisor advice-ref="txAdvice" pointcut="execution( * com.itheima.service.*.*(..))"/>
	</aop:config>

注解配置声明式事务:
		<!--
			配置事务管理器
		-->
		<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
			<!--配置数据源-->
			<property name="dataSource" ref="dataSource"/>
		</bean>
		<!--配置注解事务支持-->
		<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
@Transactional注解
	指定类   方法都开启事务
	指定方法 只有这个方法开启  (可以和类相互配合 优先选择类)
	
//查询propagation传播方式 readOnly只读  isolation隔离级别mysql默认REPEATABLE_READ(重复读)
@Transactional(propagation = Propagation.SUPPORTS,readOnly = true,isolation = Isolation.DEFAULT)
//增删改
@Transactional(propagation = Propagation.REQUIRED,readOnly = false,isolation = Isolation.REPEATABLE_READ)

JdbcTemplate
spring提供用于连数据库
设计模式
工厂模式 BeanFactory
单例模式 scope指定
动态代理 aop底层使用jdk动态代理和cglib动态代理
模板方法模式 JdbcTemplate对象,应用了模板方法模式

原文地址:https://www.cnblogs.com/x-i-n/p/14151568.html