经常会看见springboot 对sql语句出现未进行事务管理的问题,如下:

那么问题来了:
1.何为sql会话的事务管理?
2.会对所有的sql都会进行事务管理吗?
3.如何才会对sql进行事务管理?
第一问:
什么是事务管理:
百度javaEE事务管理
java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先前的操作.....
注:在Java中使用事务处理,首先要求数据库支持事务。如使用MySQL的事务功能,就要求MySQL的表类型为Innodb才支持事务。否则,在Java程序中做了commit或rollback,但在数据库中根本不能生效。
如下代码:
public int delete(int sID) { dbc = new DataBaseConnection(); Connection con = dbc.getConnection(); try { con.setAutoCommit(false);// 更改JDBC事务的默认提交方式 dbc.executeUpdate("delete from xiao where ID=" + sID); dbc.executeUpdate("delete from xiao_content where ID=" + sID); dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID); con.commit();//提交JDBC事务 con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式 dbc.close(); return 1; } catch (Exception exc) { con.rollBack();//回滚JDBC事务 exc.printStackTrace(); dbc.close(); return -1; } }
从这段代码中我们知道了:只有在成功删除了xiao ,xiao_content,xiao_affix 后,才会集中一次commit,只要有报错就会集体回滚。
把这种操作:叫做事务管理。
sql会话进行事务管理原因:
个人理解:将某些数据库操作,通过事务的方式进行管理,如果所有的操作都成功,就整个都commit,否则就将整个操作都回滚。
第二问:
可见:事务只针对了增删改,并不包含查。 因为查并不会存在一个关联性的影响。
第三问:
spring boot 使用@Transactional ,注解到方法上,那么该方法下的调用的所有的sql 都将具有该共同的事务。

如上图:就定义了一个事务名:txmanager1。那么send方法就具有了该事务。里面执行的任何代码就将都在事务中运行。
浙公网安备 33010602011771号