zoukankan      html  css  js  c++  java
  • 19、spring注解学习(声明式事务)——spring注解版声明式事务

    1、用jdbc操作数据库举例,在导入了aop和spring依赖以外,导入sping-jdbc依赖,先创建配置类TxConfig,在类中注册了三个bean

    dataSource
    jdbcTemplate
    platformTransactionManager

    还有@EnableTransactionManagement//开启基于注解的事务管理功能  千万不能忘记!

    package crm.mytest.tc;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    import javax.sql.DataSource;
    import java.beans.PropertyVetoException;
    @EnableTransactionManagement//开启基于注解的事务管理功能,重要!!
    @Configuration
    @ComponentScan("crm.mytest.tc")
    public class TxConfig {
        /**
         * DataSource
         * @return
         * @throws PropertyVetoException
         */
        @Bean
        public DataSource dataSource() throws PropertyVetoException {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser("root");
            dataSource.setPassword("123");
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql:///crm");
            return dataSource;
        }
        @Bean
        public JdbcTemplate jdbcTemplate(DataSource dataSource){
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            return jdbcTemplate;
        }
        //注册事务管理器在容器中,重要!!!
        @Bean
        public PlatformTransactionManager platformTransactionManager() throws PropertyVetoException {
        return new DataSourceTransactionManager(dataSource());//放入数据源
        }
    }

    2、简略的创建一个UserDao和UserService,模拟一下开发的mvc模式,这里就先不用接口了

    package crm.mytest.tc;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class UserDao {
        
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void insert(){
            String sql="insert into test values(?,?,?)";
             jdbcTemplate.update(sql, null, "liweijun",1);
        }
    }
    package crm.mytest.tc;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    @Service
    public class UserService {
        @Autowired
        private UserDao userDao;
    
        @Transactional
        public void insert(){
            userDao.insert();
            System.out.println("插入完成");
          //  int i=1/0;
        }
    }

    3、最后是测试类

    package crm.mytest.tc;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = crm.mytest.tc.TxConfig.class)
    public class Demo {
        @Autowired
        private UserService userService;
        @Test
        public void demo1(){
            userService.insert();
        }
    }

    最后可以自行测试在service层中制造异常,看是否回滚了

  • 相关阅读:
    集合及特殊集合arrayList
    二维数组、多维数组
    一维数组

    for循坏的穷举与迭代,while、do while循环
    1.兔子生兔子问题2.打印菱形3.求100以内质数的和
    for循环嵌套
    复习题
    循环语句
    分支语句
  • 原文地址:https://www.cnblogs.com/lyh233/p/12456134.html
Copyright © 2011-2022 走看看