经常会看见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方法就具有了该事务。里面执行的任何代码就将都在事务中运行。

 

 

 

posted on 2019-03-27 15:56  进_进  阅读(174)  评论(0)    收藏  举报