总结,
事务方法调用非事务方法-生效
非事务方法调用事务方法-不生效
事务方法调用非事务方法(相同类下)
import edu.haut.springboottest.entity.TestTable;
import edu.haut.springboottest.mapper.TestTableMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Service
public class TestTableService {
@Resource
private TestTableMapper testTableMapper;
@Transactional
public void add() {
add1();
add2();
add3();
}
public void add1() {
testTableMapper.selectById(1);
}
public void add2() {
add4();
}
public void add3() {
testTableMapper.insert(new TestTable(1, "ceshi", (byte) 1));
}
public void add4() {
testTableMapper.insert(new TestTable(1, "ceshi", (byte) 1));
testTableMapper.insert(new TestTable(1, "ceshi", (byte) 1));
}
}
结果:插入成功,事务生效
非事务方法使用事务方法(同类内)
import edu.haut.springboottest.entity.TestTable;
import edu.haut.springboottest.mapper.TestTableMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Service
public class TestTableService {
@Resource
private TestTableMapper testTableMapper;
public void add() {
add1();
add2();
add3();
}
@Transactional
public void add1() {
testTableMapper.selectById(1);
}
@Transactional
public void add2() {
add4();
}
@Transactional
public void add3() {
testTableMapper.insert(new TestTable(1, "ceshi", (byte) 1));
}
@Transactional
public void add4() {
testTableMapper.insert(new TestTable(1, "ceshi", (byte) 1));
testTableMapper.insert(new TestTable(1, "ceshi", (byte) 1));
}
}
不论多深层的方法,都插入了一条数据。事务控制失败



