标签:conf 映射 数据库数据 pass 个数 声明式 组成 ceo ace
1.事务由四个特性:ACID
2.事务传播行为:当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。
3.事务隔离级别
applicationContext.xml
1 <beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns:tx="http://www.springframework.org/schema/tx" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 10 11 <!-- 导入properties配置文件 --> 12 <context:property-placeholder location="classpath*:/jdbc.properties"/> 13 14 <!-- 扫描注解包 --> 15 <context:component-scan base-package="dao.daoImpl"/> 16 <context:component-scan base-package="service.serviceImpl" /> 17 18 <!-- 数据源基本配置 --> 19 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 20 <property name="username" value="${jdbc.username}"/> 21 <property name="password" value="${jdbc.password}"/> 22 <property name="url" value="${jdbc.url}"/> 23 <property name="driverClassName" value="${jdbc.driverClassName}"/> 24 </bean> 25 26 <!-- 创建sessionFactory --> 27 <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 28 <property name="dataSource" ref="dataSource"/> 29 <property name="hibernateProperties"> 30 <props> 31 <prop key="hibernate.show_sql">true</prop> 32 <prop key="hibernate.format_sql">true</prop> 33 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 34 </props> 35 </property> 36 <!-- 实体类映射文件 --> 37 <property name="mappingLocations"> 38 <list> 39 <value>classpath*:/domain/*.hbm.xml</value> 40 </list> 41 </property> 42 <property name="packagesToScan"> 43 <value>domain</value> 44 </property> 45 <!-- 实体类 --> 46 <property name="annotatedClasses"> 47 <list> 48 <value>domain.UserEntity</value> 49 </list> 50 </property> 51 </bean> 52 53 <!-- 创建声明式事务管理 --> 54 <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 55 <property name="sessionFactory" ref="sessionFactory"/> 56 </bean> 57 58 <!-- 事务通知 --> 59 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 60 <tx:attributes> 61 <!-- propagation配置传播行为,isolation配置隔离方式 --> 62 <tx:method name="*" propagation="REQUIRED" isolation="READ_COMMITTED"/> 63 </tx:attributes> 64 </tx:advice> 65 66 <!-- aop织入通知 --> 67 <aop:config> 68 <aop:pointcut id="serviceOption" expression="execution(* service.serviceImpl.*.*(..))"/> 69 <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOption"/> 70 </aop:config> 71 72 73 </beans>
web.xml (配置session拦截器,他将为每个请求绑定一个session,这个session是hibernateSession和,httpSession不一样,这样他可以有spring自动管理,无需手动开关)
1 <!-- 为每个请求过程绑定一个HibernateSession,它将由spring自动管理,无需手动开启和关闭 --> 2 <filter> 3 <filter-name>openSessionInterceptor</filter-name> 4 <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> 5 </filter> 6 <filter-mapping> 7 <filter-name>openSessionInterceptor</filter-name> 8 <url-pattern>/*</url-pattern> 9 </filter-mapping>
在未使用事务管理的时候,同一个事务内的两个数据库操作,一个成功了,就会对数据库产生影响,如果两个操作是互相对应的,比如一个是增加数值,一个是减少数值,如果两个操作只做个一个,那么数据将不完整,出现异常(当然这种异常数据是不会报错的),但是添加了事务管理之后,就可以防止这种问题,事务的原子性:一件事情要么全做要么不做,一旦有操作失败,那么事务将进行rallback()回滚,撤销之前的所有事务操作。
如下图:
即使执行了语句,但是后面遇到了1/0的数值计算异常,那么 事务会进行回滚,撤销操作,数据库数据还是保持原样。
标签:conf 映射 数据库数据 pass 个数 声明式 组成 ceo ace
原文地址:http://www.cnblogs.com/caijh/p/7724964.html