1. @Transactional注解
1.1 抛出异常
// 这注解Transactional,因此就只会获取一个JDBC Connection,否则代码中的三个Mapper或获取并释放三个连接
@Transactional
@Transactional
public void jdbcOperation() {
try {
xxx1Mapper.xxx1();
xxx2Mapper.xxx2();
xxx3Mapper.xxx3();
} catch (Exception e) {
// 抛出RuntimeException就会回滚事物
throw new RuntimeExcepiton(e);
}
}
1.2 不抛出异常
// 这注解Transactional,因此就只会获取一个JDBC Connection,否则代码中的三个Mapper或获取并释放三个连接
@Transactional
public void jdbcOperation() {
try {
xxx1Mapper.xxx1();
xxx2Mapper.xxx2();
xxx3Mapper.xxx3();
} catch (Exception e) {
// 这里不把异常外外抛, 这样就不会回滚事物
// 如果抛出RuntimeException就会回滚事物 导致只有部分数据删除成功
}
}
// 这注解Transactional,因此就只会获取一个JDBC Connection,否则代码中的三个Mapper或获取并释放三个连接
@Transactional
public void jdbcOperation() {
// 单独捕获每个mapper异常,其中一个mapper失败不会影响其它mapper,同时由只获取一次JDBC Connection
try {
xxx1Mapper.xxx1();
} catch (Exception e) {
// 这里不把异常外外抛, 这样就不会回滚事物
}
try {
xxx2Mapper.xxx2();
} catch (Exception e) {
// 这里不把异常外外抛, 这样就不会回滚事物
}
try {
xxx3Mapper.xxx3();
} catch (Exception e) {
// 这里不把异常外外抛, 这样就不会回滚事物
}
}
2. 无Transactional注解
public void jdbcOperation() {
xxx1Mapper.xxx1(); //这里会是一个单独的完整事物,含获取连接、提交、关闭
xxx2Mapper.xxx2(); //这里会是一个单独的完整事物,含获取连接、提交、关闭
xxx3Mapper.xxx3(); //这里会是一个单独的完整事物,含获取连接、提交、关闭
}