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

Spring5框架——通过使用(完全注解)方法实现事务操作_第1张图片

 

之前的文章讲解了通过注解方式和配置文件方式来实现事务操作,如果对本篇文章中内容有些疑惑,可以到我的主页中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定义,自动刷新上下文,因为这次使用的配置文件是配置类,所以需要更换对象来实现对配置类中配置进行提取

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

 

 

你可能感兴趣的:(小白学基础,Spring,java,spring,注解,数据库,框架)