SpringBoot事务管理
事务的概念:指多个SQL作为单一逻辑单元进行执行的操作,要么完全执行,要么完全不执行。
事务的特性:ACID
- 原子性:多个SQL语句,要么都执行,要么都不执行。
- 一致性:事务完成必须使所有的数据保持一致。
- 隔离性:当前事务的修改必须与其他事务隔离开(不能同时对同一个数据进行操作)。
- 持久性:事务执行完毕后,对数据的影响是永久的。
做实验:更新一条数据;产生异常;删除一条数据。
1.Hello.java
package com.example.demo.Controller;
import com.example.demo.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Hello{
@Autowired
private UserService userService;
@RequestMapping("/trans")
public String trans(){
userService.tranfor();
return "success";
}
}
2.UserMapper.java
package com.example.demo.Mapper;
import com.example.demo.Entity.User;
import org.apache.ibatis.annotations.*;
@Mapper
public interface UserMapper {
@Update("update user set sex = #{sex} where username = #{username}")
void updateUserInfo(@Param("username") String username, @Param("sex") String sex);
@Delete("delete from user where id = #{id}")
void deleteUserInfo(@Param("id") Integer id);
}
3.UserService.java
package com.example.demo.Service;
import com.example.demo.Entity.User;
public interface UserService {
void tranfor();
}
4.UserServiceImpl.java
package com.example.demo.Service;
import com.example.demo.Entity.User;
import com.example.demo.Mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
@Transactional
public void tranfor(){
//更新一条数据
userMapper.updateUserInfo("张三","女");
//抛出一个异常
System.out.println("修改成功,即将执行删除");
int a = 2 / 0;
//删除一条数据
userMapper.deleteUserInfo(1);
}
}
5.在浏览器中测试
(这个异常捕获看不懂可以看前面的笔记)
6.数据库中验证(数据是否更新和删除)
7.将异常语句注释掉
UserServiceImpl.java
package com.example.demo.Service;
import com.example.demo.Entity.User;
import com.example.demo.Mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
@Transactional
public void tranfor(){
//更新一条数据
userMapper.updateUserInfo("张三","女");
//抛出一个异常
System.out.println("修改成功,即将执行删除");
//int a = 2 / 0;
//删除一条数据
userMapper.deleteUserInfo(1);
}
}
8.在浏览器中测试
9.数据库中验证(数据是否更新和删除)