第二十二章、事务介绍和处理(SpringBoot2.x)

常见的隔离级别和传播行为

    1、隔离级别
        Serializable: 最严格,串行处理,消耗资源大
        Repeatable Read:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据
        Read Committed:大多数主流数据库的默认事务等级
        Read Uncommitted:保证了读取过程中不会读取到非法数据。
    2、讲解常见的传播行为
        PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务,最常见的选择。

        PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

        PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

        PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起, 两个事务之间没有关系,一个异常,一个提交,不会同时回滚

        PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

        PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常

---------------------------------------------------------------------

SpringBoot整合Mybatis之事务处理实战
 在service逻辑引入事务 @Transantional(propagation=Propagation.REQUIRED)

 测试代码如下:

package net.xdclass.base_project.service;

import java.util.List;

import net.xdclass.base_project.domain.User;

public interface UserService {
	
	public int add(User user);//添加
	public List<User> getAll();//查找全部
	public User findById(Long id);//根据id查询
	public void update(User user);//更新对象
	public void delete(Long userId);//根据id删除用户
	
	/**
	 * 功能描述:测试事务
	 * @return
	 */
	public int addAccount();
}
package net.xdclass.base_project.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import net.xdclass.base_project.domain.User;
import net.xdclass.base_project.mapper.UserMapper;
import net.xdclass.base_project.service.UserService;

@Service
public class UserServiceImpl implements UserService{

	@Autowired
	private UserMapper userMapper;
	
	@Override
	public int add(User user) {
		userMapper.insert(user);
		int id = user.getId();
		return id;
	}

	@Override
	public List<User> getAll() {
		return userMapper.getAll();
	}

	@Override
	public User findById(Long id) {
		return userMapper.findById(id);
	}

	@Override
	public void update(User user) {
		userMapper.update(user);
	}

	@Override
	public void delete(Long userId) {
		userMapper.delete(userId);		
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED)
	public int addAccount() {
		User user = new User();
		user.setAge(88);
		user.setCreateTime(new Date());
		user.setName("加入事务啊");
		user.setPhone("10010099");
		userMapper.insert(user);
		int i = 19 / 0;//抛出异常
		return 0;
	}

}

控制器:

/**
 * 功能描述:测试事务
 * @return
 */
@GetMapping("/add_account")
public Object addAccount(){
	int id = userService.addAccount();
	return JsonData.buildSuccess(id);
}

启动spring容器,访问如下:

此时,控制台和页面都会抛出异常,由于控制器中先插入了一条数据,然后抛出异常,配置了事务后,会自动回滚,数据插入不成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值