zoukankan      html  css  js  c++  java
  • 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对象,应用了模板方法模式

  • 相关阅读:
    理解 Delphi 的类(十) 深入方法[15] 调用其他单元的函数
    理解 Delphi 的类(十) 深入方法[13] 在 interface 区声明的方法
    理解 Delphi 的类(十) 深入方法[12] implementation 区中的方法
    理解 Delphi 的类(十) 深入方法[6] Result
    什么是B*树倒排索引技术 已解决 搜搜问问
    caoruntao的博客 数据结构及算法分类文章列表 ITeye技术网站
    PForDelta索引压缩算法的实现
    计算机词汇(融合了搜狗所有的计算机词库)_搜狗输入法词库
    一种由B+树实现的倒排索引《电脑知识与技术》2011年08期
    海量数据处理专题(九)——外排序
  • 原文地址:https://www.cnblogs.com/x-i-n/p/14151568.html
Copyright © 2011-2022 走看看