• 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对象,应用了模板方法模式

  • 相关阅读:
    【Codeforces 349B】Color the Fence
    【Codeforces 459D】Pashmak and Parmida's problem
    【Codeforces 467C】George and Job
    【Codeforces 161D】Distance in Tree
    【Codeforces 522A】Reposts
    【Codeforces 225C】Barcode
    【Codeforces 446A】DZY Loves Sequences
    【Codeforces 429B】Working out
    【Codeforces 478C】Table Decorations
    【Codeforces 478C】Table Decorations
  • 原文地址:https://www.cnblogs.com/x-i-n/p/14151568.html
Copyright © 2020-2023  润新知