spring声明式事务简略代码

pom.xml
<dependencies>
        <!--    jdbc        -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.4</version>
        </dependency>
        <!--   数据源 是数据库连接池     -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>
    jdbc.properties 配置文件

    jdbc.username=root
    jdbc.password=root
    jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
    jdbc.driver=com.mysql.cj.jdbc.Driver
     数据源,jdbc模板,事务配置类(核心)

    @Configuration
    @PropertySource("jdbc.properties")//读取jdbc.properties文件
    public class DBConfig {

        // Java Config,数据源
        @Bean
        DataSource dataSource(@Value("${jdbc.username}") String username,
                              @Value("${jdbc.password}") String password,
                              @Value("${jdbc.url}") String url,
                              @Value("${jdbc.driver}") String driver){
            HikariConfig config = new HikariConfig();
            config.setUsername(username);
            config.setPassword(password);
            config.setJdbcUrl(url);
            config.setDriverClassName(driver);
            HikariDataSource dataSource = new HikariDataSource(config);
            return dataSource;
        }

        //jdbc模板      DataSource dataSource,数据源
        @Bean
        JdbcTemplate jdbcTemplate(@Autowired DataSource dataSource){
            return new JdbcTemplate(dataSource);
        }

         //============事务
        // Spring提供了声明式事务模型(写个注解就可以开启事务),想要使用该功能,需要保证IOC容器中有 PlatfromTransactionManager的对象
        @Bean                                 // DataSource dataSource 给数据源开启事务
        PlatformTransactionManager txManager(@Autowired DataSource dataSource){
            return new DataSourceTransactionManager(dataSource);
        }
    }
   启用事务类1(核心)

    @Repository
    public class UserDao {
        @Resource
         private BookDao bookDao;
        //启用事务支持,如果没有(rollbackFor = RuntimeException.class)就代表出现任何异常都回滚==========事务
        @Transactional(rollbackFor = RuntimeException.class)//如果出现运行时异常才回滚
        public int updateUser(User user){
            int row = jdbcTemplate.update("update user set username=?,password=? where id=?", user.getUsername(), user.getPassword(), user.getId());
            bookDao.updateBook();//该方法里面也开启了事务,里面有事务边界的处理
            return row;
        }
    }
     启用事务类2(核心)

    //本类是 事务边界:如果一个需求,调用了多个拥有事务的类,此时事务出现边界===========事务
    @Repository
    public class BookDao {

        //有事务就加入到调用者事务中(双方出现异常一起回滚,全部成功就一起提交),没有就创建一个新的事务(本方出现异常就回滚,成功则提交)
        @Transactional(propagation = Propagation.REQUIRED)
        public void updateBook(){
            System.out.println(1/0);
        }
    }
     启动类

    @Configuration
    @ComponentScan
    @EnableTransactionManagement//启用声明式事务支持===========
    public class AppConfig {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
            UserDao bean = ac.getBean(UserDao.class);
            User user = new User(1, "zs", "lll");
            System.out.println(bean.updateUser(user));

        }
    }

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值