学习Spring的第十八天

注解方式配值声明式事务控制

直接上源码配置类

package com.itheima.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@MapperScan("com.itheima.mapper")
@EnableTransactionManagement //<tx:annotation-driven/>
public class SpringConfig {

    @Bean
    public DataSource dataSource(
             @Value("${jdbc.driver}") String driver,
            @Value("${jdbc.url}") String url,
            @Value("${jdbc.username}") String username,
            @Value("${jdbc.password}") String password
    ){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        return sqlSessionFactoryBean;
    }

    @Bean
    public DataSourceTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }


}

 

里面包含  DataSourse方法 , sqlsessionfactoryBean方法 , 及事务管理器 DataSourseTransactionMAnager方法,  

@ComponentScan("com.itheima")   扫描注解component
@PropertySource("classpath:jdbc.properties")   加载Propertys
@MapperScan("com.itheima.mapper")  扫描Mapper
@EnableTransactionManagement //<tx:annotation-driven/>  事务的自动代理 ,注解驱动

Service层 :

@Service("accountService")
@Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountMapper accountMapper;

    @Override
    @Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)
    public void transferMoney(String outAccount, String inAccount, Integer money) {
        accountMapper.decrMoney(outAccount,money);
        int i = 1/0;
        accountMapper.incrMoney(inAccount,money);
    }
}

mapper

public interface AccountMapper {

    //+钱
    @Update("update tb_account set money=money+#{money} where account_name=#{accountName}")
    public void incrMoney(@Param("accountName") String accountName,@Param("money") Integer money);

    //-钱
    @Update("update tb_account set money=money-#{money} where account_name=#{accountName}")
    public void decrMoney(@Param("accountName") String accountName,@Param("money") Integer money);


}

 测试省略(spring_trans_test)

相关推荐

  1. 学习Spring

    2024-02-16 07:48:02       58 阅读
  2. 学习STM32

    2024-02-16 07:48:02       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-16 07:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-16 07:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-16 07:48:02       82 阅读
  4. Python语言-面向对象

    2024-02-16 07:48:02       91 阅读

热门阅读

  1. leetcode - 2149. Rearrange Array Elements by Sign

    2024-02-16 07:48:02       49 阅读
  2. mac安装docker-compose

    2024-02-16 07:48:02       60 阅读
  3. C语言-----习题

    2024-02-16 07:48:02       47 阅读
  4. 罗马数字转整数

    2024-02-16 07:48:02       61 阅读
  5. 深度学习代码块之计算模型参数量和显存大小

    2024-02-16 07:48:02       56 阅读
  6. 使用深度学习进行序列分类

    2024-02-16 07:48:02       52 阅读
  7. uniapp 读取本地文件

    2024-02-16 07:48:02       64 阅读