Spring3.0注解形式对事务的支持

Spring3.0注解形式对事务的支持

1.依赖导入

        
            org.springframework
            spring-jdbc
            5.2.8.RELEASE
        
        
            mysql
            mysql-connector-java
            5.1.47
        
        
            com.alibaba
            druid
            1.1.10
        

数据库:
Spring3.0注解形式对事务的支持_第1张图片

2.配置类

@Configuration
@ComponentScan(basePackages = "com.example.tx")
@EnableTransactionManagement//开启事务管理,对应xml中标签
public class Config {
    //导入Druid连接池Bean
    @Bean(destroyMethod = "close")//销毁时调用close方法
    public DruidDataSource getDruidDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("12345");
        dataSource.setUrl("jdbc:mysql:///temporary?useSSL=false&useUnicode=true&characterEncoding=UTF-8");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        return dataSource;
    }
    //导入JdbcTemplate
    @Bean
    public JdbcTemplate getJdbcTemplate(DruidDataSource dataSource){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        return jdbcTemplate;
    }
    //注册事务管理器
    @Bean
    public DataSourceTransactionManager transactionManager(DruidDataSource dataSource ){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
        return dataSourceTransactionManager;
    }
}

3.开发dao

接口

public interface CountDao {
    void increat(Integer count ,String name);
    void delect(Integer count ,String name);
}

实现类:

@Repository
public class CountDaoImpl implements CountDao {
    @Resource
    private JdbcTemplate jdbcTemplate;

    @Override
    public void increat(Integer count, String name) {
        jdbcTemplate.update("update crount set amount=amount+? where name = ?",count,name);

    }

    @Override
    public void delect(Integer count, String name) {
        jdbcTemplate.update("update crount set amount=amount-? where name = ?",count,name);
    }
}

4.Service开发

接口

public interface TranceService {
    void trance(String from ,String to,Integer count);
}

实现类


@Service
public class TraceServiceImpl implements TranceService {
    //注入dao
    @Autowired
    private CountDao countDao;
    @Transactional//开启事务注解
    @Override
    public void trance(String from, String to, Integer count) {
        countDao.delect(count,from);
        int a = 10/0;
        countDao.increat(count,to);

    }
}

5.测试类:

public class Demo {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);

        TranceService bean = (TranceService) context.getBean( "traceServiceImpl");
        bean.trance("张三","李四",10);
    }
}

6.以上配置类中开启了事务效果

在这里插入图片描述
数据库数据没有发生变化
Spring3.0注解形式对事务的支持_第2张图片

7.去掉事务驱动注解

Spring3.0注解形式对事务的支持_第3张图片
但是数据库发生变化:
Spring3.0注解形式对事务的支持_第4张图片

8.总结:

需要设置事务的地方:

  1. 配置类上增加事务驱动注解
    @EnableTransactionManagement//开启事务管理,对应xml中标签
  2. 配置类中配置事务管理器
    //注册事务管理器
    @Bean
    public DataSourceTransactionManager transactionManager(DruidDataSource dataSource ){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
        return dataSourceTransactionManager;
    }
  1. service类或方法上使用@Transactional//开启事务注解注解

你可能感兴趣的:(#,框架,spring)