mybatis如何使用truncate清空表

 更新时间:2022年03月11日 15:43:19   作者:攻城日记  
这篇文章主要介绍了mybatis如何使用truncate清空表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用truncate清空表

Mapper接口

void truncateTable();

XML文件

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

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

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

场景

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

  • 首先执行一个delete语句;
  • 然后执行一个truncate语句;
  • 最后再执行一个insert语句;

问题

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

解释

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

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

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

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

那它们是如何协调的呢?

  • spring首先会在一开始创建连接开启事务,同时将连接放进当前线程(threadlocal);
  • mybatis执行sql语句时会从当前线程获取连接——这样就保证了spring和mybatis使用的是同一个连接;
  • mybatis执行sql后,会检查方法上是否有事务注解,如果有的话就不执行commit语句;

最后由spring执行commit。

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

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

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

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

相关文章

  • Java数组的定义与使用

    Java数组的定义与使用

    数组是有序的元素序列,若将有限个类型相同的变量的集合命名,那么这个名称为数组名。本文通过代码示例详细介绍了Java数组的定义和使用,对学习或工作有一定的帮助,需要的小伙伴欢迎阅读
    2023-04-04
  • springboot全局配置文件与多环境配置的全过程

    springboot全局配置文件与多环境配置的全过程

    SpringBoot项目在多环境配置上表现的非常优秀,只需要非常简单的操作就可以完成配置,下面这篇文章主要给大家介绍了关于springboot全局配置文件与多环境配置的相关资料,需要的朋友可以参考下
    2021-12-12
  • 深入学习java ThreadLocal的源码知识

    深入学习java ThreadLocal的源码知识

    ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,特别适用于各个线程依赖不通的变量值完成操作的场景。下面我们来详细了解一下它吧
    2019-06-06
  • RestTemplate的URL请求示例

    RestTemplate的URL请求示例

    这篇文章主要为大家介绍了RestTemplate的URL请求示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java中EnumMap和EnumSet枚举操作类的简单使用详解

    Java中EnumMap和EnumSet枚举操作类的简单使用详解

    这篇文章主要介绍了Java中EnumMap和EnumSet枚举操作类的简单使用详解,EnumMap是Map接口的一种实现,专门用于枚举类型的键,所有枚举的键必须来自同一个枚举 EnumMap不允许键为空,允许值为空,需要的朋友可以参考下
    2023-11-11
  • Spring AOP 的组成和实现

    Spring AOP 的组成和实现

    这篇文章主要介绍了Spring AOP 的组成和实现,AOP 是一种思想,Spring AOP 是这种思想的具体实现,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java面试题冲刺第二十一天--JVM

    Java面试题冲刺第二十一天--JVM

    这篇文章主要为大家分享了最有价值的三道关于JVM的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot JWT实现token登录刷新功能

    SpringBoot JWT实现token登录刷新功能

    JWT本身是无状态的,这点有别于传统的session,不在服务端存储凭证。这种特性使其在分布式场景,更便于扩展使用。接下来通过本文给大家分享SpringBoot JWT实现token登录刷新功能,感兴趣的朋友一起看看吧
    2021-09-09
  • 解读JDK、JRE、JVM的区别与联系

    解读JDK、JRE、JVM的区别与联系

    这篇文章主要介绍了解读JDK、JRE、JVM的区别与联系,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java 图片与byte数组互相转换实例

    Java 图片与byte数组互相转换实例

    下面小编就为大家带来一篇Java 图片与byte数组互相转换实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论