java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 使用truncate清空表

mybatis如何使用truncate清空表

作者:攻城日记

这篇文章主要介绍了mybatis如何使用truncate清空表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用truncate清空表

Mapper接口

void truncateTable();

XML文件

  <update id="truncateTable" >
    TRUNCATE TABLE 表名
  </update>

注意:是<update>标签,不是<delete>标签

事务方法中使用truncate会发生什么

场景

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

问题

为什么delete语句和truncate语句执行成功,但insert语句虽然执行了,却没有提交?

解释

首先,在没有事务注解的方法中,一切与数据库的交互都是由mybatis处理的,

而mybatis默认是事务自动提交的,也就是每条sql语句执行完后会立即提交。

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

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

那它们是如何协调的呢?

最后由spring执行commit。

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

执行完truncate后,当前事务已被提交(truncate虽然性能比delete好,但它是DDL语句,会触发事务提交),后续执行sql时,由于mybatis检测到事务注解所以不会提交

而spring此时早已把事务提交,也不会在方法结束时再一次提交了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文