文章目录
一、测试前的准备
数据表结构:
1. StuService
package com.ybqdren.service;
import com.ybqdren.pojo.Stu;
/**
* Wen(Joan) Zhao <withzhaowen@126.com>
* 2021/9/15
*/
public interface StuService {
public Stu getStuInfo(int id);
public void saveStu();
public void saveStu(int id);
public void updateStu(int id);
public void deleteStu(int id);
public void saveParent();
public void saveChildren();
}
2. StuServiceImpl
package com.ybqdren.service.impl;
import com.ybqdren.mapper.StuMapper;
import com.ybqdren.pojo.Stu;
import com.ybqdren.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Wen(Joan) Zhao <withzhaowen@126.com>
* 2021/9/15
*/
@Service
public class StuServiceImpl implements StuService {
@Autowired
private StuMapper stuMapper;
//@Transactional(propagation = Propagation.SUPPORTS)
@Override
public Stu getStuInfo(int id) {
return (Stu) stuMapper.selectByPrimaryKey(id);
}
//@Transactional(propagation = Propagation.REQUIRED)
@Override
public void saveStu() {
Stu stu = new Stu();
stu.setName("jack");
stu.setAge(18);
stuMapper.insert(stu);
}
// @Transactional(propagation = Propagation.REQUIRED)
@Override
public void saveStu(int id) {
}
//@Transactional(propagation = Propagation.REQUIRED)
@Override
public void updateStu(int id) {
Stu stu = new Stu();
stu.setId(id);
stu.setName("lucy");
stu.setAge(20);
stuMapper.updateByPrimaryKey(stu);
}
//@Transactional(propagation = Propagation.REQUIRED)
@Override
public void deleteStu(int id) {
stuMapper.deleteByPrimaryKey(id);
}
@Override
public void saveParent() {
Stu stu = new Stu();
stu.setName("parent");
stu.setAge(19);
stuMapper.insert(stu);
}
@Override
public void saveChildren() {
saveChild1();
}
public void saveChild1(){
Stu stu1 = new Stu();
stu1.setName("child-1");
stu1.setAge(11);
stuMapper.insert(stu1);
}
public void saveChild2(){
Stu stu1 = new Stu();
stu1.setName("child-2");
stu1.setAge(11);
stuMapper.insert(stu1);
}
}
3. TestTransService
package com.ybqdren.service;
public interface TestTransService {
public void testPropagationTrans();
}
4. TestTransServiceImpl
package com.ybqdren.service.impl;
import com.ybqdren.service.StuService;
import com.ybqdren.service.TestTransService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class TestTransServiceImpl implements TestTransService {
@Autowired
private StuService stuService;
// @Transactional(propagation = Propagation.REQUIRED)
@Override
public void testPropagationTrans() {
stuService.saveParent();
}
}
5. TransTest
import com.ybqdren.Application;
import com.ybqdren.service.StuService;
import com.ybqdren.service.TestTransService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* Wen(Joan) Zhao <withzhaowen@126.com>
* 2021/9/19
*/
@SpringBootTest(classes = Application.class)
public class TransTest {
@Autowired
private StuService stuService;
@Autowired
private TestTransService testTransService;
@Test
public void myTest() {
testTransService.testPropagationTrans();
}
}
二、不使用事务
1. StuServiceImpl
package com.ybqdren.service.impl;
import com.ybqdren.mapper.StuMapper;
import com.ybqdren.pojo.Stu;
import com.ybqdren.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Wen(Joan) Zhao <withzhaowen@126.com>
* 2021/9/15
*/
@Service
public class StuServiceImpl implements StuService {
@Autowired
private StuMapper stuMapper;
// .....
@Override
public void saveParent() {
Stu stu = new Stu();
stu.setName("parent");
stu.setAge(19);
stuMapper.insert(stu);
}
@Override
public void saveChildren() {
saveChild1();
// 在两次添加数据的操作之间加入一个绝对会报异常的代码
int a = 1/0;
saveChild2();
}
public void saveChild1(){
Stu stu1 = new Stu();
stu1.setName("child-1");
stu1.setAge(11);
stuMapper.insert(stu1);
}
public void saveChild2(){
Stu stu1 = new Stu();
stu1.setName("child-2");
stu1.setAge(11