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