本指南将引导您完成用非侵入性事务操作数据库的过程,您将构建一个简单的JDBC应用程序,在该应用程序中,您可以使用事务操作数据库,而无需编写专门的JDBC代码。数据库事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。在实际项目中,经常用到,比如转帐,一个人的增加,一个人的钱减少,这个必须要一起完成,不能一个人钱增加了,另一个人钱没减少;或一个人钱减少,另一个人钱没增加。这些操作就需要放在一个事务里。面试经常问到事务的ACID的问题,大家可以自行了解。
我利用业余时间,翻译了Spring官网的例子,方便中文不好的同学,将陆续发到头条上,欢迎大家关注,也可以上我个人BLOG:itmanclub.com,上面有已经翻译过的。
![93827ff45ca782a6565664e36a54d807.png](https://img-blog.csdnimg.cn/img_convert/93827ff45ca782a6565664e36a54d807.png)
程序结构
└── src └── main └── java └── hello
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework gs-managing-transactions 0.1.0org.springframework.boot spring-boot-starter-parent 2.1.6.RELEASE1.8org.springframework.boot spring-boot-starter-jdbc com.h2database h2 runtimeorg.springframework.boot spring-boot-maven-plugin
Spring Boot将会你做如下的事:
- 将 classpath 里面所有用到的jar包构建成一个可执行的 JAR 文件,方便执行你的程序
- 搜索public static void main()方法并且将它当作可执行类
- 根据springboot版本,去查找相应的依赖类版本,当然你可以定义其它版本。
创建一个定单服务
从考虑服务交互开始这个过程。
首先,使用BookingService类创建一个基于JDBC的服务,该服务按名称将人员预订到系统中。
src/main/java/hello/BookingService.java
package hello;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;@Componentpublic class BookingService { private final static Logger logger = LoggerFactory.getLogger(BookingService.class); private final JdbcTemplate jdbcTemplate; public BookingService(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Transactional public void book(String... persons) { for (String person : persons) { logger.info("预定 " + person + " 在一个座位上..."); jdbcTemplate.update("insert into BOOKINGS(FIRST_NAME) values (?)