Spring Boot 使用事务

1. 事务介绍

事务是一种机制,将对数据库的一系列操作视为一个执行单元,保证单元内的操作同时成功,或者当有一个操作失败时全部失败。
Spring Boot 事务实质上就是 Spring 事务,只不过 Spring Boot 基于自动配置的特性作了部分处理来节省开发者的配置工作。

Spring 事务分两种方式:
编程式事务,通过编码方式实现事务。
声明式事务,基于 AOP将具体业务逻辑与事务处理解耦。本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。(建议采用)

在实际使用中声明式事务用的比较多 ,原因在于声明式事务不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码。

实现声明式事务有两种方式:一种是在 XML 配置文件中做相关的事务规则声明;另一种是基于 @Transactional 注解的方式(用的最多)。

2. Spring Boot 使用事务

2.1 引入依赖

Spring Boot中实现事务没有额外的Jar包,还是基本的数据库访问包

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!-- 热部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
		<!-- Web支持 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- MySQL驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 集成MyBatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.2</version>
		</dependency>

2.2 实现事务

/**
 * 订单服务类
 */
@Service // 注册为服务类
public class OrderService {
	@Autowired
	private GoodsDao goodsDao;
	@Autowired
	private OrderDao orderDao;

	/**
	 * 下单
	 * 
	 * @param goodsId 购买商品id
	 * @param count   购买商品数量
	 * @return 生成订单数
	 */
	@Transactional // 实现事务
	public int createOrder(Long goodsId, Long count) {
		// 锁定商品库存
		GoodsDo goods = goodsDao.selectForUpdate(goodsId);
		// 扣减库存
		Long newNum = goods.getNum() - count;
		goods.setNum(newNum);
		goodsDao.update(goods);
		// 生成订单
		OrderDo order = new OrderDo();
		order.setGoodsId(goodsId);
		order.setCount(count);
		int affectRows = orderDao.insert(order);
		return affectRows;
	}
}

这样Spring Boot事务就实现了,不需要其他配置。

注: @Transactional 不仅可以注解在方法上,也可以注解在类上。当注解在类上时,意味着此类的所有 public 方法都是开启事务的。如果类级别和方法级别同时使用了 @Transactional 注解,则使用在类级别的注解会重载方法级别的注解。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值