spring事务笔记(根据某视频截图)--单体应用非分布式专题

574 篇文章 4 订阅

在这里插入图片描述
在这里插入图片描述

三个核心接口

实现类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    <!--导入外面xml-->
   <import resource="classpath:applicationContext-aspectj.xml"/>
    <!--配置事务管理的模板 ================================= 开始=====================================-->
    <!--编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,
    所以既能起到事务管理的作用,又可以不影响业务代码的具体实现-->

    <!--1.编程式事务管理 允许用户在代码中精确定义事务的边界-->
   <!-- <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="transactionManager"></property>
        &lt;!&ndash;定义事务隔离级别 , -1表示数据库默认使用隔离级别&ndash;&gt;
        &lt;!&ndash;isolationLevelName属性名有问题????&ndash;&gt;
        <property name="isolationLevelName" value="ISOLATION_DEFAULT"></property>
        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"></property>
    </bean>-->

    <context:annotation-config />
    <context:component-scan base-package="com.jidongcloud" />

    <!--在Spring配置文件中定义事务管理器-->

    <!--调用链路:
 DataSourceTransactionManager========>javax.sql.DataSource==========>java.sql.Connection, rollback()回滚事务
 ,commit()提交事务
 -->
    <!--DataSourceTransactionManager通过调用 java.sql.Connection来管理事务
   这里有我们熟悉的
        void setAutoCommit(boolean autoCommit) throws SQLException;
        void commit() throws SQLException;rollback();
     -->
    <!--通过dataSource属性指定需要事务管理的单个javax.sql.DataSource对象-->
    <!-- DataSource  Connection getConnection(String username, String password)
throws SQLException;-->

    <!--定义基于Mybatis,JDBC的DataSource声明式事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <!--这里指定数据源, 可以是druid数据库连接池-->
        <property name="dataSource" ref="myDataSource"/>
    </bean>

    <!--以下是了解内容-->

    <!--Jdo事务管理器  ,此外还有 Hibernate/Jpa事务管理器-->
    <!--  <bean id="txManager-jdb" class="org.springframework.orm.jdo.JdoTransactionManager">
          &lt;!&ndash;通过persistenceManagerFactory 指定事务管理的javax.jdo.persistenceManagerFactory对象&ndash;&gt;
          <property name="persistenceManagerFactory" ref="persistenceManagerFactory"/>

      </bean>-->

    <!--
       <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>

   // 定义事务管理器(声明式的事务)
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

      -->

    <!--2.1.声明式事务管理:基于tx和aop命名空间的xml配置文件。而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。-->
    <tx:advice id="advice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="addStudent" propagation="REQUIRED" isolation="DEFAULT"   />
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <!--使用tx标签配置的拦截器-->
        <aop:pointcut id="interceptorPointCuts" expression="execution(* com.jidongcloud.transaction.servicce.StudentServiceImpl.addStudent(..))"/>
        <aop:advisor advice-ref="advice" pointcut-ref="interceptorPointCuts"/>
    </aop:config>
    <!--2.2.声明式事务管理:基于@Transactional注解。而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。-->
   <!-- <tx:annotation-driven transaction-manager="transactionManager"/>-->

    <!--配置事务管理的模板 ================================= 结束=====================================-->
    <!-- 指定属性配置文件的位置
         location:指定属性配置文件的位置,使用classpath:表示类路径
    -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 声明数据源DataSource, 使用druid -->
    <bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close" >
        <!--
                      使用属性配置文件中的数据, 语法格式: ${key}
         -->
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- 声明SqlSessionFactoryBean ,创建SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定数据源DataSource -->
        <property name="dataSource" ref="myDataSource" />
        <!-- 指定mybatis的主配置文件
             Resource类型,赋值使用value ,spring会读取文件,转为Resource类型
             classpath:指定到类路径中找配置文件
        -->
        <property name="configLocation" value="classpath:mybatis.xml" />
    </bean>

    <!-- 声明mybatis的扫描器对象,创建Dao接口的实现类对象 -->
    <!--
        1.通过属性sqlSessionFactoryBeanName,能获取到SqlSessionFactory
        2.通过SqlSessionFactory.openSession(),得到SqlSession对象
        for(接口:com.bjpowernode.dao所有接口){
                         接口的实现类对象  = 使用sqlSession.getMapper(接口.class);
                         把创建好的对象放入到spring的容器中,springMap.put(接口的首字母小写,接口的实现类对象)
        }

     -->
    <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 指定SqlSessionFactory对象 -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <!-- 指定Dao接口的包名 -->
        <property name="basePackage" value="com.jidongcloud.transaction.dao" />
    </bean>

    <!-- 声明Service对象 -->
    <bean id="studentService" class="com.jidongcloud.transaction.servicce.StudentServiceImpl">
        <!--service接口首字母小写-->
        <property name="stuDao" ref="studentDao"/>
    </bean>

</beans>


可以参考这篇博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值