栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring声明式事务管理(完全注解方式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring声明式事务管理(完全注解方式)

Spring声明式事务管理(完全注解方式)

    创建数据表

    目录结构

    配置类

    package com.sun.Spring.Dao.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    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.annotation.EnableTransactionManagement;
    
    import javax.sql.DataSource;
    
    @Configuration   //配置类
    //组件扫描
    @ComponentScan(basePackages ="com.sun.Spring.Dao")
    //开启事务
    @EnableTransactionManagement
    public class TxConfig {
    //    创建数据库连接池
        @Bean
        public DruidDataSource getDruidDataSource(){
            DruidDataSource dataSource=new DruidDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///数据库名");
            dataSource.setUsername("用户名");
            dataSource.setPassword("密码");
            return dataSource;     //返回值是DruidDataSource类型的
        }
    //    创建JDBCTemplate对象
        @Bean
        public JdbcTemplate getJdbcTemplate(DataSource dataSource){
    //        到ioc容器中根据类型找到dataSource对象进行注入
            JdbcTemplate jdbcTemplate=new JdbcTemplate();
            jdbcTemplate.setDataSource(dataSource);
            return jdbcTemplate;
        }
    //    配置事务管理器
        @Bean
        public DataSourceTransactionManager getdataSourceTransactionManager(DataSource dataSource){
            DataSourceTransactionManager TransactionManager=new DataSourceTransactionManager();
            TransactionManager.setDataSource(dataSource);
            return TransactionManager;
        }
    }
    
    

    UserDaoImpl.java 实现类

    package com.sun.Spring.Dao.Dao;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class UserDaoImpl implements UserDao {
    //    注入JDBCTemplate模板    模板已在配置文件中配置完成
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public void addMoney() {
            String sql="update t_account set money=money+? where username=?";
            int marry = jdbcTemplate.update(sql, 100, "mary");
            System.out.println(marry);
    
        }
    
        @Override
        public void reduceMoney() {
            String sql="update t_account set money=money-? where username=?";
            int lucy = jdbcTemplate.update(sql, 100, "lucy");
            System.out.println(lucy);
        }
    
    }
    
    

    UserService.java 实现转账

    package com.sun.Spring.Dao.Service;
    
    import com.sun.Spring.Dao.Dao.UserDao;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Isolation;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;
    
    @Service
    public class UserService {
    //    注入Dao
        @Autowired
        private UserDao userDao;
    //    传播行为,隔离级别
        @Transactional(timeout = -1,readonly = false ,propagation=Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)
        public void setMoney(){
    //        lucy少100
                userDao.reduceMoney();
                int a=100/0;
    //        mary多一百
                userDao.addMoney();
        }
    }
    
    

    注:第一步,开启事务。第二步,进行事务操作。第三步,如果没有发生异常,提交事务;如果发生异常,事务回滚。(数据表数据不会发生变化)-----事务包含的所有操作要么全部成功,要么全部失败回滚。

    测试方法

    //    完全注解开发
        @Test
        public void test2(){
            ApplicationContext context=
                    new AnnotationConfigApplicationContext(TxConfig.class);
            UserService userService = context.getBean("userService", UserService.class);
            userService.setMoney();
        }
    }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号