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 暂未实现后续补充其他方式