CREATE TABLE `users` (
`name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`sex` varchar(2) NOT NULL,
`AGE` int(11) NOT NULL,
`email` varchar(32) NOT NULL,
`password` varchar(40) NOT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE KEY `name_unique` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
INSERT INTO `dba6`.`users`(`name`, `sex`, `AGE`, `email`, `password`, `id`) VALUES ('张三', '男', 11, '111@163.con', '112233', 1);
import com.example.mybatis_plus.entity.UsersEntity;
import com.example.mybatis_plus.mapper.UsersDao;
import com.example.mybatis_plus.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service("usersService")
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersDao usersDao;
@Override
@Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW)
public void updateUser() throws InterruptedException {
System.out.println("开始执行了");
UsersEntity usersEntity=usersDao.selectById(1);
usersEntity.setName("李四");
usersDao.updateById(usersEntity);
Thread.sleep(20*000);
}
@Override
@Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW)
public void getUser() throws InterruptedException {
UsersEntity usersEntity = usersDao.selectById(1);
System.out.println(usersEntity);
Thread.sleep(60*1000);
usersEntity = usersDao.selectById(1);
System.out.println(usersEntity);
}
}
- 我先执行updateUser,再执行getUser。
- 两者事务,都是读提交。
- getUser第一次执行时,输出的name为张三
- 但getUser第二次执行时,updateUser已经更新(20秒),而事务是读提交的,此时getUser在60秒后读取,应该是李四,但结果依旧为张三??把事务替换为可重复读,也是这个效果
UsersEntity(name=张三, sex=男, age=11, email=111@163.con, password=112233, id=1)
开始执行了
UsersEntity(name=张三, sex=男, age=11, email=111@163.con, password=112233, id=1)