mybatis如何使用truncate清空表
目录
- 使用truncate清空表
- Mapper接口
- XML文件
- 事务方法中使用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此时早已把事务提交,也不会在方法结束时再一次提交了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Mybatis批量删除多表
一. 这里主要考虑两种参数类型:数组或者集合. 而这点区别主要体现在EmpMapper.xml文件中标签的collection属性: 当collection="array"时,表名参数为数组; 当collection="list"时,表名参数为集合. 二. 注意: 无论Mybatis是与mysql数据库结合,还是与Oracle数据库,都同样适合如下设置与操作. 三. 具体示例如下: EmpMapper.xml: <!-- 批量删除员工信息 --> <
-
Mybatis如何自动生成数据库表结构总结
一般情况下,用Mybatis的时候是先设计表结构再进行实体类以及映射文件编写的,特别是用代码生成器的时候. 但有时候不想用代码生成器,也不想定义表结构,那怎么办? 这个时候就会想到Hibernate,然后想到它的hibernate.hbm2ddl.auto配置项. 所以手工创表的问题可以很方便的迅速用Hibernate来解决. 那有人问啦:就是不想用Hibernate才换的Mybatis,你这又兜回去了吗? 其实不是的,我们需要的就是单单一个hbm2ddl功能. 其实应该这么想:有一款工具能够自
-
Mybatis自动创建表和更新表结构
最近有小伙伴问我mybatis有没有自动创建表结构的功能,因为他们之前一直使用hibernate用习惯了,理所当然的认为,在实体类上配置下注解或者写写映射文件,系统启动后就可以自动创建表. 我只能很遗憾的告诉他,mybatis并没有这个功能,看他兴致阑珊的样子,我只能安慰他,就算没有这功能,我们可以自己开发啊~~ 所以就有了下面这套系统,已开源大家可以下来看看~~ Mybatis_BuildTable_V0.2 https://git.oschina.net/sunchenbin/Mybatis
-
mybatis如何使用truncate清空表
目录 使用truncate清空表 Mapper接口 XML文件 事务方法中使用truncate会发生什么 场景 问题 解释 使用truncate清空表 Mapper接口 void truncateTable(); XML文件 <update id="truncateTable" > TRUNCATE TABLE 表名 </update> 注意:是<update>标签,不是<delete>标签 事务方法中使用truncate
-
MySQL查看表和清空表的常用命令总结
查看MySQL数据库表 进入MySQL Command line client下 查看当前使用的数据库: mysql>select database(); mysql>status; mysql>show tables; mysql>show databases;//可以查看有哪些数据库,返回数据库名(databaseName) mysql>use databaseName; //更换当前使用的数据库 mysql>show tables; //返回当前数据库下的所有表的
-
delete from 表名与truncate table 表名区别
1.delete不能使自动编号返回为起始值.但是truncate能使自动增长的列的值返回为默认的种子 2.truncate只能一次清空,不能按条件删除.但是delete可以按条件清除部分记录. 3.truncate清空数据表性能(速度)比delete快. 4.truncate不会记录到系统日志,不会触发delete触发器.
-
mysql清空表数据的两种方式和区别解析
在MySQL中删除数据有两种方式: truncate(截短)属于粗暴型的清空 delete属于精细化的删除 删除操作 如果你需要清空表里的所有数据,下面两种均可: delete from tablename; truncate table tablename; 而如果你只是删除一部分数据,就只能使用delete: delete from tablename where case1 and case2; 区别 在精细化的删除部分数据时,只能使用delete. 而清空所有表数据时,两者均可,此时这两
-
MySQL删除表数据与MySQL清空表命令的3种方法浅析
目录 一.MySQL清空表数据命令:truncate 二.MySQL删除表命令:drop 三.MySQL清空数据表内容的语法:delete 补充:MySQL删除表操作delete.truncate.drop的区别 总结 一.MySQL清空表数据命令:truncate SQL语法: truncate table 表名 注意: 不能与where一起使用. truncate删除数据后是不可以rollback的. truncate删除数据后会重置Identity(标识列.自增字段),相当于自增列会被置为
-
MYSQL清空表和截断表问题
目录 MYSQL清空表和截断表 清空表:delete from users: 截断表:truncate table users: MYSQL清空表数据的注意事项 两者比较 总结 MYSQL清空表和截断表 清空表和截断表 清空表:delete from users: 清空表只是清空表中的逻辑数据,但是物理数据不清除,如主键值.索引等不被清除,还是原来的值. 截断表:truncate table users: 截断表可以用于删除表中 的所有数据.截断表命令还会回收所有索引的分配页. 截断表的执行速度
-
js清空表单数据的两种方式(遍历+reset)
方法1:遍历页面元素 /* 清空FORM表单内容 id:表单ID*/ function ClearForm(id) { var objId = document.getElementById(id); if (objId == undefined) { return; } for (var i = 0; i < objId.elements.length; i++) { if (objId.elements[i].type == "text") { objId.elements[
-
jQuery实现form表单reset按钮重置清空表单功能
有时候可能需要实现这样的效果:使用ajax提交表单,成功提交表单之后清空表单,如下代码: 复制代码 代码如下: <form> <input name="name1" /><br/> <input name="name1" /><br/> <textarea name="content"></textarea> <a href="javascript
-
javascript实现页面刷新时自动清空表单并选中的方法
本文实例讲述了javascript实现页面刷新时自动清空表单并选中的方法.分享给大家供大家参考.具体实现方法如下: <script language="javascript"> window.onload=function() { document.forms[0].reset(); placeFocus(); } function placeFocus() { document.forms[0].elements[0].focus(); // assuming the f
-
Mybatis基于注解实现多表查询功能
对应的四种数据库表关系中存在四种关系:一对多,多对应,一对一,多对多.在前文中已经实现了xml配置方式实现表关系的查询,本文记录一下Mybatis怎么通过注解实现多表的查询,算是一个知识的补充. 同样的先介绍一下Demo的情况:存在两个实体类用户类和账户类,用户类可能存在多个账户,即一对多的表关系.每个账户只能属于一个用户,即一对一或者多对一关系.我们最后实现两个方法,第一个实现查询所有用户信息并同时查询出每个用户的账户信息,第二个实现查询所有的账户信息并且同时查询出其所属的用户信息. 1.项目
随机推荐
- C# 定义常量 两种实现方法
- ios开发:一个音乐播放器的设计与实现案例
- 详解ios中自定义cell,自定义UITableViewCell
- Python中list列表的一些进阶使用方法介绍
- VS2013安装时如何避开IE10的限制
- JS实现自动定时切换的简洁网页选项卡效果
- AspNetPager+GridView实现分页的实例代码
- python list语法学习(带例子)
- JSP 开发SSH整合异常解决办法
- chrome下判断点击input上标签还是其余标签的实现方法
- 使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
- 微信小程序动态添加分享数据
- 安装oracle11g INS-30131执行安装程序验证所需的初始设置失败的解决方法
- jquery 插件开发备注
- jquery连缀语法如何实现
- js实现图片轮播效果学习笔记
- 详解轻巧AMH虚拟主机面板安装使用和GCE云空间搭建网站实例
- Android属性动画实现炫酷的登录界面
- C#在后台运行操作(BackgroundWorker用法)示例分享
- android获取监听SD Card状态的方法