美文网首页
J2EE进阶学习——Spring框架(八):事务管理

J2EE进阶学习——Spring框架(八):事务管理

作者: TiHom | 来源:发表于2018-03-14 09:42 被阅读0次

Spring事务管理

1.spring事务管理的两种方式
第一种 编程式事务管理(不用)
第二种 声明式事务管理

  • 基于xml配置文件的实现(要会用)
  • 基于注解方式实现(更喜欢用)
    2.Spring事务管理的API
  • 接口:PlatformTransactionManager 事务管理器
    org.springframework.jdbc.datasource.DataSourceTransactionManager ——>Mybatis
    首先配置事务管理器

搭建转账环境

1.创建数据库表,添加数据


2.创建service类和dao类,完成注入关系

  • service层业务逻辑层
  • dao层对数据库操作,在dao层不添加业务
  • 需求:小杨要转1000给小鑫
    • 小王-1000,小鑫+1000

3.出现问题

  • 如果小王少了1000之后,发生了异常,小马不会多1000,钱丢失了

添加事务解决,出现异常时进行回滚操作

声明式事务管理

xml事务管理配置

1.配置文件方式使用AOP思想配置
第一步:配置事务管理器

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入dataSource,对哪个数据库做处理 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>

第二步:配置事务的增强

<!-- 配置事务增强 -->
   <tx:advice transaction-manager="transactionManager" id="txadvice">
       <!-- 做事务操作 -->
       <tx:attributes>
           <!-- 设置进行事务操作方法匹配规则 -->
           <tx:method name="account*" propagation="REQUIRED"/>
       </tx:attributes>
   </tx:advice>

第三步:配置切面

<!-- 配置切面 -->
    <aop:config>
        <!-- 切入点 -->
        <aop:pointcut id="pointcut1" expression="execution(* com.TiHom.service.OrderService.*(..))"/>
        <!-- 切面 -->
        <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
    </aop:config>

注解事务管理配置

第一步:配置事务管理器
第二步:配置事务注解

<!-- 开启事务的注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

第三步:在要使用事务的方法使用类上面添加注解

@Transactional
public class OrderService {
    private OrderDao orderDao;

    public void setOrderDao(OrderDao orderDao) {
        this.orderDao = orderDao;
    }

    /**
     * 写转账的业务
     */
    public void accountMoney(){
        //小杨-1000
        orderDao.lessMoney();

        //出现异常
        int i = 10/0;

        //小鑫+1000
        orderDao.moreMoney();
    }
}

OrderDao

public class OrderDao {
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    /*
     * 做对数据库操作的方法,不写业务操作
     */
    //少钱的方法
    public void lessMoney(){
        String sql = "update account set salary=salary-? where username=?";
        jdbcTemplate.update(sql,1000,"小杨");
    }

    //加钱的方法
    public void moreMoney(){
        String sql = "update account set salary=salary+? where username=?";
        jdbcTemplate.update(sql,1000,"小鑫");
    }
}

相关文章

网友评论

      本文标题:J2EE进阶学习——Spring框架(八):事务管理

      本文链接:https://www.haomeiwen.com/subject/fgrtqftx.html