1:使用@Transactional注解方式实现
*测试在@Test测试环境不可使用会直接回滚 原因暂未剖析
*该注解可直接表明在方法 类 接口上 不建议接口方式会失效
2:使用原生连接实现数据库事务管理 支持测试环境
@Test
public void update() {
Connection conn = null;
Statement ps = null;
Statement ps2 = null;
String sql1 = "update user set last_name = 'sadggg' where id = 1";
String sql2 = "update user set last_name = 'dfefgdsgnaskjfhjkf' where id = 2";
try {
conn = DBUtil.getConnection();
conn.setAutoCommit(false);
//编译第一条sql
ps = conn.createStatement();
ps.executeUpdate(sql1);
//编译执行第二条sql这里可以使用插入一条异常语句或业务逻辑 我使用的是将sql超过列设置长度模拟执行失败
ps2 = conn.createStatement();
ps2.executeUpdate(sql2);
conn.commit();
} catch (Exception e) {
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
} finally {
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closeResource(conn, ps);
}
}
System.out.println("执行完毕");
}
3:使用management 暂未实现后续补充其他方式
文章讨论了两种数据库事务管理方式:一种是使用@Transactional注解,但在@Test测试环境中可能无法正常工作;另一种是通过原生的数据库连接手动管理事务,包括开启、提交和回滚。示例代码展示了如何在出现异常时进行回滚操作,确保数据一致性。
796

被折叠的 条评论
为什么被折叠?



