Spring5框架——通过使用(完全注解)方法实现事务操作

d70c6b61180147f5ae90c276ace7e3ff.jpg

 

之前的文章讲解了通过注解方式和配置文件方式来实现事务操作,如果对本篇文章中内容有些疑惑,可以到我的主页中spring专栏中去了解关于spring框架的内容

 

1:创建配置类,使它实现配置文件的作用

package new_study.bank_system;

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 = "new_study.bank_system")  //组件扫描
@EnableTransactionManagement       //开启事务
public class xml_class {

    @Bean
    public DruidDataSource getDruidDataSource(){          //配置地址池
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setUrl("jdbc:mysql://127.0.0.1:3306");
        druidDataSource.setUsername("demo1");
        druidDataSource.setPassword("123");
        return druidDataSource;
    }
    @Bean    //配置JdbcTemplate,将创建的地址池注入到JdbcTemplate
    public JdbcTemplate getjdbc(DataSource dataSource){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
    @Bean    //创建事务管理器
    public DataSourceTransactionManager getdtm(DataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }
}

创建类:使它实现对数据库的操作

//开启事务的注解
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)   
//创建对象的注解
@Service
public class operat_system {
     @Autowired
    private JdbcTemplate jdbcTemplate;
    public void changmoney(Object[] user,int id){  //实现银行取钱和存钱功能,在一表中的money值发生变化
       if (id==1){
            String sql ="UPDATE myemployees.`bank` SET myemployees.`bank`.`money`=myemployees.`bank`.`money`-? WHERE myemployees.`bank`.`id`=?";
            jdbcTemplate.update(sql,user);
            System.out.println("取钱成功");
        }
       else{
            String sql ="UPDATE myemployees.`bank` SET myemployees.`bank`.`money`=myemployees.`bank`.`money`+? WHERE myemployees.`bank`.`id`=?";
            jdbcTemplate.update(sql,user);
            System.out.println("存钱成功");
        }
    }

    public void zz(operat_system aa,Object[] user,Object[] user2){   //实现银行用户的转账功能,从用户一转到用户二
        aa.changmoney(user,1);
        int m = 10/0;
        aa.changmoney(user2,0);
        System.out.println("转账成功");
    }

}

创建测试类:

public class test {

    public static void main(String[] args) {
      ApplicationContext context = new AnnotationConfigApplicationContext(xml_class.class);
        operat_system bank1 = context.getBean("operat_system", operat_system.class);
         Object[] a1 = {100, "1"};
        Object[] a2 = {100, "2"};
        bank1.zz(bank1, a1, a2);
   }
}

//注意:这里使用的实例化对象是AnnotationConfigApplicationContext:从配置文件中提取Bean定义,自动刷新上下文,因为这次使用的配置文件是配置类,所以需要更换对象来实现对配置类中配置进行提取

最后的结果与前面几篇文章相同,这里就不进行过多介绍。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想睡醒的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值