mybatis中truncate,oracle清空表数据truncate

  mybatis中truncate,oracle清空表数据truncate

  00-1010使用truncate清除表映射器接口XML文件事务方法。解释在事务处理方法中使用truncate时会发生什么

  

目录

 

  

使用truncate清空表

void truncate table();

 

  00-1010 update id= truncate table truncate table name/update注意:它是更新标记,而不是删除标记。

  

Mapper接口

 

  

XML文件

在一个spring项目的事务方法中(使用@transactional注解):

 

  首先,执行一条delete语句;然后执行truncate语句;最后,执行insert语句;

  00-1010为什么delete语句和truncate语句执行成功,但是insert语句执行了却没有提交?

  00-1010首先,在没有事务注释的方法中,所有与数据库的交互都由mybatis处理,

  默认情况下,mybatis由事务自动提交,也就是说,每条sql语句在执行后都会立即提交。

  在添加事务注解后,应用与数据库的交互会由spring和mybatis共同处理(所以它们要共用同一个数据源):

  Spring管理事务,mybatis负责具体sql的执行。

  那它们是如何协调的呢?

  首先,spring会在开始时创建一个连接打开事务,并将连接放入当前线程本地。mybatis执行sql语句时,会从当前线程获取连接——,从而保证spring和mybatis使用同一个连接;mybatis执行sql后,会检查方法上是否有事务注释,如果有,则不会执行commit语句;最后,提交由spring执行。

  这也就解释了一开始的问题:

  执行truncate后,当前事务已被提交(虽然truncate比delete有更好的性能,但它是一个DDL语句,会触发事务提交)。当sql随后被执行时,它将不会被提交,因为mybatis检测到了事务注释。

  Spring此时已经提交了事务,不会在方法结束时再次提交。

  以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: