mysql批量update更新,mybatis中批量更新操作
在日常开发中,有时候会遇到批量更新操作,这时候最普通的写法就是循环遍历,然后一条一条地进行update操作。但是不管是在服务端进行遍历,还是在sql代码中进行遍历,都很耗费资源,而且性能比较差,容易造成阻塞。
Mysql没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。
Mysql中代码示例:
UPDATE tablename
SET sort = CASE id
WHEN 1 THEN 'sort1'
WHEN 2 THEN 'sort2'
WHEN 3 THEN 'sort3'
END,
updateuserid = CASE id
WHEN 1 THEN 'updateuserid1'
WHEN 2 THEN 'updateuserid2'
WHEN 3 THEN 'updateuserid3'
END
WHERE id IN (1,2,3)
sql释义:
如果id为1,则sort的值为sort1,updateuserid的值为updateuserid1;
如果id为2,则sort的值为sort2,updateuserid的值为updateuserid2;
如果id为3,则sort的值为sort3,updateuserid的值为updateuserid3;以此类推。
Mybatis中代码示例:
<update id="updateBatch" parameterType="list">
update t_mt_sm_dept
<trim prefix="set" suffixOverrides=",">
<trim prefix=" sort = case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="sort != '' and sort != null">
when id=#{i.id} then #{i.sort}
</if>
</foreach>
</trim>
<trim prefix="updateuserid = case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="updateuserid != '' and updateuserid != null">
when id=#{i.id} then #{i.updateuserid}
</if>
</foreach>
</trim>
<trim prefix="updateusername = case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="updateusername != '' and updateuserid != null">
when id=#{i.id} then #{i.updateusername}
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" separator="or" item="i" index="index">
id = #{i.id}
</foreach>
</update>
java中代码:
/**
* 批量修改排序
*/
int updateBatch(List<SmDept> smDeptList);
mysql批量update更新,mybatis中批量更新操作的更多相关文章
- 161102、MyBatis中批量插入
方法一: <insert id="insertbatch" parameterType="java.util.List"> <selectKe ...
- mybatis中批量插入的两种方式(高效插入)
MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用 ...
- 如何在mybatis 中使用In操作
如何在mybatis 中使用In操作 假如我们想使用这样一个sql 语句,但是这样的sql语句有IN这样的操作.在我们的mybatis中有相对应的操作 SELECT * FROM product_db ...
- 【mybatis】mybatis中批量插入 批量更新 batch 进行insert 和 update,或者切割LIst进行批量操作
================================================================== 分别展示 mybatis 批量新增 和 批量更新 的操作: ...
- 170829、mybatis使用oracle和mybatis中批量更新
一.mybatis执行批量更新batch update 的方法(mysql数据库) 1.数据库连接必须配置:&allowMultiQueries=true(切记一定要加上这个属性,否则会有问题 ...
- MyBatis中批量insert
在orcale和mybatis执行批量插入是不一样的. orcale如下:(这里要注意的是:useGeneratedKeys="false" ) 方式1:oracle批量插入使用 ...
- 使用logstash拉取MySQL数据存储到es中的再次操作
使用情况说明: 已经使用logstash拉取MySQL数据存储到es中,es中也创建了相应的索引,也存储了数据.假若把这个索引给删除了,再次进行同步操作的话要咋做,从最开始的数据进行同步,而不是新增的 ...
- mybatis中批量更新的问题
问题:使用mybatis在执批量更新操作时,一直报错执行失败 解决方法: 首先打印了SQL语句,发现SQL语句拿出来执行没问题,也可以批量执行.SQL没问题,应该是配置的问题. 在网上查询和很多资料, ...
- mybatis中批量插入以及更新
1:批量插入 批量插入就是在预编译的时候,将代码进行拼接,然后在数据库执行 <insert id="batchInsert" parameterType="java ...
随机推荐
- git bash的一些使用经验
1.最开始使用git的时候, git remote -v 查看远程仓库 报了一个错误fatal: not a git repository (or any of the parent director ...
- Cleanmymac X空间透镜再升级
什么是空间镜透,在Cleanmymac X中具体干什么使得?你了解多少?没关系,不要紧,看这里,下面给大家分享一下这款好用软件下的实用功能-空间透镜.盘它! 首先,Cleanmymac X是一款Mac ...
- Python【每日一问】09
问:请分别写一段Python代码实现一下功能: (1)计算一个文件中的大写字母数量 (2)输入中文,返回相应的拼音,并写入文件中 答: (1)计算一个文件中的大写字母数量 file_name = &q ...
- Zookeeper并不保证读取的是最新数据
Zookeeper并不保证读取的是最新数据 原文地址:http://www.crazyant.net/2120.html 如果是对zk进行读取操作,读取到的数据可能是过期的旧数据,不是最新的数据. 已 ...
- C++日常应用-定时器
定时器的使用:分为有句柄 无句柄两类 有句柄情况下的使用:头文件: 1.添加映射 BEGIN_MSG_MAP(类名) MESSAGE_HANDLER(WM_TIMER, OnTimer) END_MS ...
- sprinmvc与 Struct2框架的区别
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...
- git push 本地项目推送到远程分支
大家有的时候,会在本地新建项目,这里说一下在本地项目建立本地git仓库,然后push到远程仓库的步骤 1.在本地项目的文件夹下,git仓库初始化 git init 初始化本地git仓库 2. git ...
- 通过ClickOnce本地打包发布WPF应用程序
环境: 1)VS 2015 Windows10 x64 .net framework 4.5.2 要点: 1)安装模式和设置选择可以脱机使用. 2)系统必备组件中安装位置选择与应用程序相同位置下载系 ...
- c语言实现:扫雷
问题描述:相信大多数人都很熟悉扫雷游戏,在n*n的雷盘上随机埋上一些雷,玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格.游戏的目标是在不翻出任何地雷格的条件下,找出所有 ...
- 12Linux_Apache_vsftpd(匿名开发模式)
网站:让我们的用户可以通过浏览器去访问到的文档的资源. windows:IIS Linux:Apache Nginx(吃得少,干的多) APACHE:基金会,公司,软件 httpd:软件名称,软件包名 ...