SpringBoot项目搭建
创建SpringBoot项目
首先在IDEA编译器中创建SpringBoot项目,注意选择链接: 阿里云这个网址进行创建,可以选择Java17以下的版本,
点击进行创建之后,这个页面可以选择需要引入的依赖,注意,我们这里SpringBoot的版本为2.6.13,不要选择3.0以上的版本,因为SpringBoot3.0版本需要Java17以上作为支持,我们在这个页面不需要选择任何依赖,阿里云作为镜像网站,其中代码会自动生成,我们不选择任何依赖就可以使用纯净版进行开发,进入项目以后我们可以手动进行依赖的引入。
进入项目,首先打开pom.xml文件,将依赖引入dependencies双标签中,引入依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
接下来我们就可以愉快的编程了。
事务
接下来我们可以先学习一下事务(transaction),在Java中,事务通常指的是数据库操作中的一个概念,它确保了数据库操作的原子性、一致性、隔离性和持久性(ACID属性)。在Java的数据库编程中,事务可以通过JDBC API来管理,也可以使用更高级的框架如JPA(Java Persistence API)或Spring Framework来简化事务管理。
-
原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个点。
-
一致性(Consistency):事务必须保证数据库从一个一致性状态转换到另一个一致性状态。
-
隔离性(Isolation):并发执行的事务之间不会相互影响,每个事务都像是在独立运行。
-
持久性(Durability):一旦事务提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。
在Java中,可以通过以下方式管理事务:
-
JPA:通过实体管理器(EntityManager)来管理事务,可以在实体管理器上调用beginTransaction()开始事务,commit()提交事务,rollback()回滚事务。
-
Spring Framework:Spring提供了声明式事务管理,可以通过注解(如@Transactional)或编程式事务管理来控制事务的边界。
事务管理是确保数据完整性和一致性的关键机制,特别是在多用户环境中进行并发数据库操作时。
编程式事务
首先来讲一下"编程式事务",指的是在编程过程中,通过代码显式地管理事务的开始、提交或回滚。在编程式事务中,开发者需要手动控制事务的生命周期,包括何时开始事务、何时提交事务以及在遇到错误时如何回滚事务。这种方法提供了更细粒度的控制,但同时也增加了代码的复杂性。
我们可以通过创建管理类来进行事务的开启,提交和回滚:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.support.TransactionTemplate;
@Service
public class MyService {
private final TransactionTemplate transactionTemplate;
@Autowired
public MyService(PlatformTransactionManager transactionManager) {
this.transaction