(一)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();
    }
原文地址:https://www.cnblogs.com/niujifei/p/15559018.html