• 大型运输行业实战_day10_1_自定义事务管理类


    1.创建事务管理类  TransactionManager.java

     1 package com.day02.sation.transaction;
     2 
     3 import com.day02.sation.util.JdbcUtil;
     4 
     5 import java.sql.SQLException;
     6 
     7 /**
     8  * Created by Administrator on 1/8.
     9  */
    10 public class TransactionManager {
    11     /**
    12      * 关闭事务自动提交
    13      */
    14     public void before1() {
    15         System.out.println("-----before-----");
    16         try {
    17             JdbcUtil.getConnection().setAutoCommit(false);
    18         } catch (SQLException e) {
    19             e.printStackTrace();
    20         }
    21     }
    22 
    23     /**
    24      * 手动提交事务
    25      */
    26     public void after2() {
    27         System.out.println("-----after-----");
    28         try {
    29             JdbcUtil.getConnection().commit();
    30         } catch (SQLException e) {
    31             e.printStackTrace();
    32         }
    33     }
    34 
    35     /**
    36      * 事务回滚
    37      */
    38     public void rollback() {
    39         System.out.println("-----rollback-----");
    40         try {
    41             JdbcUtil.getConnection().rollback();
    42         } catch (SQLException e) {
    43             e.printStackTrace();
    44         }
    45     }
    46 }

     2.创建配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
     4        xsi:schemaLocation="http://www.springframework.org/schema/beans
     5         http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop
     6          http://www.springframework.org/schema/aop/spring-aop.xsd">
     7     <!--需要被管理的业务类-->
     8     <bean id="ticket3Service" class="com.day02.sation.transaction.Ticket3Service"/>
     9     <!--事务管理器-->
    10     <bean id="txManager" class="com.day02.sation.transaction.TransactionManager"/>
    11    <!-- aop配置-->
    12     <aop:config>
    13       <!--  配置切面-->
    14         <aop:aspect ref="txManager">
    15             <!--地点:方法-->
    16             <aop:pointcut id="txPoint" expression=" execution(* com.day02.sation.transaction.*Service.*(..) )"/>
    17             <!--时间-->
    18           <!--  方法执行前-->
    19             <aop:before method="before1" pointcut-ref="txPoint"/>
    20             <!--方法执行后-->
    21             <aop:after-returning method="after2" pointcut-ref="txPoint"/>
    22             <!--抛出异常时-->
    23             <aop:after-throwing method="rollback" pointcut-ref="txPoint"/>
    24         </aop:aspect>
    25     </aop:config>
    26 </beans>

    3.需要被管理的业务类 Ticket3Service.java

     1 package com.day02.sation.transaction;
     2 
     3 import com.day02.sation.util.JdbcUtil;
     4 
     5 import java.sql.Connection;
     6 import java.sql.Statement;
     7 
     8 /**
     9  * Created by Administrator on 1/8.
    10  */
    11 public class Ticket3Service {
    12     public void buyTicket() throws Exception {
    13         Connection connection = JdbcUtil.getConnection();
    14         Statement statement = connection.createStatement();
    15         //关闭自动提交数据
    16         String sql = " UPDATE ticket SET standby=14  WHERE id=3 ";
    17         int i = statement.executeUpdate(sql);
    18         System.out.println("===" + (1 / 0));
    19         //新增订单
    20         String sql2 = "INSERT INTO ticket_order (order_number,user_id,ticket_id) VALUES ('105',1,3)";
    21         statement.executeUpdate(sql2);
    22     }
    23 }

    4.测试方法

     1 package com.day02.sation.test;
     2 
     3 import com.day02.sation.transaction.Ticket3Service;
     4 import org.junit.Test;
     5 import org.junit.runner.RunWith;
     6 import org.springframework.beans.factory.annotation.Autowired;
     7 import org.springframework.test.context.ContextConfiguration;
     8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
     9 
    10 /**
    11  * Created by Administrator on 12/27.
    12  */
    13 @RunWith(SpringJUnit4ClassRunner.class)
    14 @ContextConfiguration("classpath:spring/spring-myaop.xml")
    15 public class TestTransaction {
    16     @Autowired
    17     private Ticket3Service ticket3Service;
    18 
    19     @Test
    20     public void testGetList() {
    21         try {
    22             ticket3Service.buyTicket();
    23 
    24         } catch (Exception e) {
    25             e.printStackTrace();
    26         }
    27     }
    28 }

    5.使用到的jdbc工具类

     1 package com.day02.sation.util;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 
     6 /**
     7  * Created by Administrator on 1/8.
     8  */
     9 public class JdbcUtil {
    10     private static Connection connection = null;
    11 
    12     static {
    13         try {
    14             Class.forName("com.mysql.jdbc.Driver");
    15             connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station", "root", "admin");
    16         } catch (Exception e) {
    17             e.printStackTrace();
    18         }
    19 
    20     }
    21 
    22     public static Connection getConnection() {
    23 
    24         return connection;
    25     }
    26 }

    完成测试吧!

  • 相关阅读:
    2020面试阿里,字节跳动90%被问到的JVM面试题
    mysql数据库误删恢复
    因用了Insert into select语句,公司报警了
    Spring的Controller是单例还是多例?怎么保证并发的安全
    SpringBoot项目优化和Jvm调优
    java从一个pdf中取出指定页生成一个新的pdf
    java截取出字符串中的所有组数字
    oracle表空间位置迁移
    solr常用操作及集成分词器或cdh集群部署说明
    Oracle中将列查询结果多行逗号拼接成一个大字段
  • 原文地址:https://www.cnblogs.com/newAndHui/p/8243142.html
Copyright © 2020-2023  润新知