Spring基础篇:Spring操作数据库的方式以及事务控制(下)

简介: Spring操作数据库的方式以及事务控制(下)

在上篇中,我们发现当Service层操作Dao时,发生错误后会使Sql语句出现执行错误问题:用户A增加了100,用户B未执行减少操作

在该篇,我们将学习Spring的事务操作。(仅仅展示声明式事务)

Spring做事务管理的Bean

回顾:当我们自己手动操作事务的时候需要走这几步:

  1. 拿到DataSourceconnection
  2. 手动设置connectionsetAutoCommitfalse,我们需要自己编程控制事务的提交和回滚
  3. 使用try...catch将业务代码包围
  4. catch中设置回滚
  5. finally设置关闭connection

还挺麻烦的,现在框架的好处体现了,Spring帮我们做了这些事,我们只需要将一个Bean注入到容器中,管理我们的DataSource就行。

需要注入的Bean org.springframework.jdbc.datasource.DataSourceTransactionManager

注解篇

这里重点分享如何使用注解,编写声明式事务,因为注解相比其他方式真的太简单了。

编写配置文件

DataSourceTransactionManager注入到Spring容器中。在构造方法中只需要把driverManagerDataSource()通过依赖注入的方式注入。

@Configuration
@ComponentScan("juejin.jdbc.anno")
public class JdbcAnnotationConfig {
    @Bean
    public DriverManagerDataSource driverManagerDataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/juejin_sql");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(){
        return new JdbcTemplate(driverManagerDataSource());
    }
    
    // 这里是新内容
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(){
        return new DataSourceTransactionManager(driverManagerDataSource());
    }
}

添加@EnableTransactionManagement注解

@Configuration
@ComponentScan("juejin.jdbc.anno")
// 这里是新内容
@EnableTransactionManagement
public class JdbcAnnotationConfig 

在具体的业务上添加@Transactional注解

这里我们在业务AccountService上添加了@Transactional注解,表示该类中所有的方法都开启了事务。

@Service
@Transactional
public class AccountService {

    @Autowired
    AccountDao accountDao;
    // 一个交易方法
    public void deal(){
        accountDao.addMoney(1,100);
        int i = 1 / 0;
        accountDao.reduceMoney(2,100);
    }
}

测试

结果:数据库中的数据是正常的,表示SQL事务控制成功。

public class JdbcAnnotationApplication {
    public static void main(String[] args) throws SQLException {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(JdbcAnnotationConfig.class);
        AccountService service = ctx.getBean(AccountService.class);
        service.deal();
    }
}
目录
相关文章
|
4天前
|
存储 数据处理 数据库
深入了解达梦数据库的增删查改操作:从入门到精通
深入了解达梦数据库的增删查改操作:从入门到精通
|
2天前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
4天前
|
安全 Java 数据库连接
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
|
4天前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
7 1
|
4天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
9 0
|
7天前
|
Java 数据库连接 数据库
Spring事务简介,事务角色,事务属性
Spring事务简介,事务角色,事务属性
16 2
|
7天前
|
SQL JSON 关系型数据库
[UE虚幻引擎插件DTPostgreSQL] PostgreSQL Connector 使用蓝图连接操作 PostgreSQL 数据库说明
本插件主要是支持在UE蓝图中连接和操作PostgreSQL 数据库。
16 2
|
11天前
|
Java 数据库连接 数据库
16:事务-Java Spring
16:事务-Java Spring
26 5
|
11天前
|
Java 关系型数据库 数据库连接
【C 言专栏】C 语言与数据库的连接与操作
【5月更文挑战第2天】本文探讨了C语言如何连接和操作数据库,介绍了数据库连接的基本原理,如通过ODBC、JDBC或原生接口与数据库交互。文章详细阐述了使用ODBC连接的步骤,并列举了C语言在数据库操作中的常见任务,强调了错误处理、数据类型匹配和性能优化的重要性。通过实际案例,展示了在学生信息管理系统中应用C语言与数据库交互的过程。本文旨在帮助读者更好地理解和应用C语言进行数据库管理。
|
12天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。