spring5之关于事务的操作

关于事务是什么学了数据库的都应该知道,在spring中如何完成事务的操作有两种方式,1是xml配置,2是注解开发,xml配置的我就不粘代码了,直接注解

1.首先创建配置类

复制代码
@Configuration
//你要扫描的项目包名
@ComponentScan(basePackages = "spring5")
//开启事务的注解
@EnableTransactionManagement
public class Config {
    //创建数据库的链接池
    @Bean
    public DruidDataSource getDruidDataSource(){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("url");
        dataSource.setUsername("root");
        dataSource.setPassword("passowrd");
        return dataSource;
    }

    //链接对象
    @Bean
    public JdbcTemplate getjdbcTemplate(DruidDataSource dataSource){
        JdbcTemplate jdbcTemplate=new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
    //事务管理器
    @Bean
    public DataSourceTransactionManager getDataSourceTransactionManager(DruidDataSource dataSource){
        DataSourceTransactionManager transactionManager=new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }

}
View Code
复制代码

2.Dao层

复制代码
@Repository
public class Userdaoimpl implements Userdao{
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void addmoney() {
        String sql="update t_acount set money=money-? where username=?";
        jdbcTemplate.update(sql,50,"chenghaixiang");
    }

    @Override
    public void reducemoney() {
        String sql="update t_acount set money=money+? where username=?";
        jdbcTemplate.update(sql,50,"wang");

    }
}
View Code
复制代码

3.service层

复制代码
@Service
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)
public class UserService {
    @Autowired
    private Userdao userdao;

    public void zhuanzhang(){

            userdao.addmoney();
            //异常
            //用来测试事务的
            int i=10/0;
            userdao.reducemoney();

    }
}
View Code
复制代码

4.测试

复制代码
@Test
    public void test3(){
        ApplicationContext context=new AnnotationConfigApplicationContext(Config.class);
        UserService userService=context.getBean("userService",UserService.class);
        userService.zhuanzhang();
    }
View Code
复制代码

测试结果应该是加了int i=10/0 。对数据库操作不成功

在service层中@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)这个注解是对事务操作的一些配置

如ioslation:事务隔离级别,propagation:事务传播行为等等

posted @   chenghaixinag  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示