• (一)AOP:【1】事务案例


    一、声明式事务环境搭建

      1、导入依赖

        导入相关依赖:数据源、数据库驱动、spring-jdbc 模块

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring-version}</version>
            </dependency>
    
            <!-- 数据库依赖 -->
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.44</version>
            </dependency>

        

      2、配置数据源、JdbcTemplate(Spring提供的简化数据库操作工具)操作数据

      3、在方法上标注 @Transaction 表示当前方法是一个事务方法;

      4、在配置类上使用  @EnableTransactionManagement 开始基于注解的事务管理功能;

      5、配置事务管理器来控制事务:

        //注册事务管理器在容器中
        @Bean
        public PlatformTransactionManager transactionManager() throws Exception{
            return new DataSourceTransactionManager(dataSource());
        }
    

      

    二、案例

      1、声明一个 dao 组件

    @Repository
    public class UserDao {
    
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void insert(){
            String sql = "INSERT INTO `user` (name, password) VALUES(?,?)";
            String password = UUID.randomUUID().toString().substring(0, 5);
            jdbcTemplate.update(sql, "张三", password);
        }
    
    }

      2、声明一个 service 组件,并加上事务方法

    @Service
    public class UserService {
    
        @Autowired
        private UserDao userDao;
    
        @Transactional
        public void insertUser(){
            userDao.insert();
            //otherDao.other();xxx
            System.out.println("插入完成...");
            int i = 10/0;
        }
    
    }

      3、创建配置类,并加入相关组件

    @EnableTransactionManagement
    @ComponentScan("com.njf.bean")
    @Configuration
    public class TxConfig {
    
        //数据源
        @Bean
        public DataSource dataSource() throws Exception {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser("root");
            dataSource.setPassword("root");
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
            return dataSource;
        }
    
        //配置 JdbcTemplate
        @Bean
        public JdbcTemplate jdbcTemplate() throws Exception{
            //Spring对@Configuration类会特殊处理;给容器中加组件的方法,多次调用都只是从容器中找组件
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource());
            return jdbcTemplate;
        }
    
        //注册事务管理器在容器中
        @Bean
        public PlatformTransactionManager transactionManager() throws Exception{
            return new DataSourceTransactionManager(dataSource());
        }
    }

      4、测试

        @Test
        public void test1() {
            AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext(TxConfig.class);
    
            System.out.println("IOC容器创建完毕");
    
            UserService userService = ioc.getBean(UserService.class);
    
            userService.insertUser();
        }
  • 相关阅读:
    Laravel在不同的环境调用不同的配置文件
    Sphinx全文索引 第一节
    Eclipse 快捷键 (应用中自己总结)
    Ehcache计算Java对象内存大小
    计算Java对象内存大小
    HashMap
    CPU高的排查
    JVM-GC学习
    详细分析Java中断机制-转载
    GC知识记录
  • 原文地址:https://www.cnblogs.com/niujifei/p/15559018.html
Copyright © 2020-2023  润新知