Spring: transaction

 

声明式:

复制代码
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-aop:2.7.0'
    implementation group: 'org.springframework', name: 'spring-aspects', version: '5.3.18'
    implementation('org.springframework:spring-jdbc:5.3.20')
    implementation('com.alibaba:druid-spring-boot-starter:1.2.9')
    implementation('mysql:mysql-connector-java:8.0.29')
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
复制代码

 

配置类

复制代码
@Configuration
public class Config{
  @Bean
  public DataSource dataSource(){
    DruidDataSource druidDataSource = new DruidDataSource();
    druidDataSource.setUrl("jdbc:mysql://localhost:3306/java");
    druidDataSource.setUsername("root");
    druidDataSource.setPassword("coalesce");
    druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    return druidDataSource;
  }

  @Bean
  public JdbcTemplate jdbcTemplate(DataSource dataSource){
    return new JdbcTemplate(dataSource);
  }
  @Bean
  public TransactionManager transactionManager(DataSource dataSource){
    return new DataSourceTransactionManager(dataSource);
  }
}
复制代码

 

DAO:

复制代码
@Repository
public class VengeDao{
  @Autowired
  private JdbcTemplate jdbcTemplate;

  public int insert(){
    String sql = "INSERT INTO auth (name,password) VALUES (?,?)";
    String name = UUID.randomUUID().toString().substring(0, 5);
    Random random = new Random();
    Integer password = random.nextInt(1000, 10000);
    int update = jdbcTemplate.update(sql, name, password);
    int b = 10 / 0;
    return update;
  }
}
复制代码

 

Service

复制代码
@Service
@EnableTransactionManagement
public class VengeService{
  @Autowired
  private VengeDao vengeDao;

  @Transactional
  public int insertVenge(){
    return vengeDao.insert();

  }
}
复制代码

 

复制代码
@ComponentScan("io.vent.venial")
public class VenialApplication{
  public static void main(String[] args){
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
    context.registerBean(VenialApplication.class);
    context.refresh();
    VengeService vengeService = context.getBean(VengeService.class);
    System.out.println("vengeService.insertVenge() = " + vengeService.insertVenge());
    for(String beanDefinitionName : context.getBeanDefinitionNames()){
      System.out.println("\033[37;7m>>>>>> " + beanDefinitionName + " <<<<<<\033[0m");
    }
    context.close();
  }
}
复制代码

 

posted @   ascertain  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-06-05 spec文件汇总
2020-06-05 rpm用法指南
2020-06-05 rpmbuild制作rpm包
2020-06-05 fpm制作rpm包
点击右上角即可分享
微信分享提示