Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/。目前想批量更新,如果update的值是相同的话,很简单,组织
update table set column='...' where id in (1,2,3)l
这样的sql就可以了。Mybatis中这样写就行
<update id="batchUpdateStudentWithMap" parameterType="java.util.Map" >
UPDATE STUDENT SET name = #{name} WHERE id IN
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
但是这样的需求很少,一般是有个集合,每个元素中的值是不一样的,然后需要一次性更新。一般的处理方式是使用for循环。这样的效率较低,当数据量大时,期望有种一次性插入的操作。如果使用的是mysql,有
insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) on duplicate key update
和
replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc)
两种方式可以处理。
当前数据库是oracle,可以使用case when来拼成一长串sql处理
UPDATE mytable
SET myfield = CASE id
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)
实际上这种方式对于mysql也有效。
最开始的时候,想着写一系列并列的更新语句就可以了
<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";"
open="" close="">
update REGION_CODE set
CODE=#{item.Code,jdbcType=VARCHAR},
NAME=#{item.Name,jdbcType=VARCHAR}
where ID = #{item.id,jdbcType=DECIMAL}
</foreach>
</update>
这样直接报错,因为Mybatis映射文件中的sql语句不允许 ; 符号,可以数据库连接配置:&allowMultiQueries=true。按照可行的case when处理方式,Mybatis映射文件书写方式如下:
case when 的条件匹配 在where中用in 选择传入了 case when 字段和where in 字段要一致
<update id="updateBatch" parameterType="java.util.List">
update REGION_CODE set
CODE=
<foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
when #{item.id,jdbcType=DECIMAL} then #{item.Code,jdbcType=VARCHAR}
</foreach>
,NAME=
<foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
when #{item.id,jdbcType=DECIMAL} then #{item.Name,jdbcType=VARCHAR}
</foreach>
where ID in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id,jdbcType=DECIMAL}
</foreach>
</update>
至此,批量更新功能完成。
项目中实际使用案例:
- <update id="updateForBatch" parameterType="java.util.List">
- update user_credit_black_list set
- type=
- <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
- when #{item.id,jdbcType=BIGINT} then #{item.type,jdbcType=VARCHAR}
- </foreach>
- ,user_id=
- <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
- when #{item.id,jdbcType=BIGINT} then #{item.userId,jdbcType=BIGINT}
- </foreach>
- ,update_time=
- <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
- when #{item.id,jdbcType=BIGINT} then #{item.updateTime,jdbcType=TIMESTAMP}
- </foreach>
- ,delete_flg=
- <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
- when #{item.id,jdbcType=BIGINT} then #{item.deleteFlg,jdbcType=BIT}
- </foreach>
- ,update_code=
- <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
- when #{item.id,jdbcType=BIGINT} then #{item.updateCode,jdbcType=BIGINT}
- </foreach>
- where ID in
- <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
- #{item.id,jdbcType=BIGINT}
- </foreach>
- </update>
相关推荐
本文将深入探讨在Hibernate应用中处理批量更新和批量删除的最佳实践,以及如何避免常见的性能陷阱。 ### 一、批量更新的基本概念 批量更新是指对数据库中的多条记录进行一次性更新操作,相较于单条记录更新,批量...
这款工具允许用户一次性上传多篇文章,支持的格式包括TXT和HTML,这两种格式通常用于存储纯文本或包含HTML标签的文本内容。 在WordPress中,手动一篇篇地添加文章可能会非常耗时,尤其是当需要导入大量已有内容或者...
同时,这两种方法也是PyCharm强大功能的一个体现,它能够帮助开发者在遵循最佳实践的同时,优化代码结构和可读性。在日常的开发工作中,掌握这些批量修改的技巧,能够显著提高处理代码变更的效率。因此,对于想要...
在MyBatis中,批量更新(batch update)是一种提高数据库操作效率的重要手段,尤其是在处理大量数据更新时。这里我们将详细探讨如何在Oracle和MySQL数据库中使用MyBatis进行批量更新。 1. **Oracle数据库的批量更新...
为了更好地实践这两种方法,我们可以参考`content.txt`文件中的示例代码,这可能包含了具体的实现细节。学习和理解这些代码,将有助于加深对易语言批量操作编辑框的理解,并能够在自己的项目中灵活运用。 总的来说...
为了解决这些难题,林芳芳、刘飞等人提出了一种适用于中小批量生产的两阶段质量控制方法。 该方法的提出基于对现有质量控制方法的局限性进行深入分析,首先对中小批量生产过程中样本数据量不足、连续抽样样本具有...
本教程将深入探讨ADOTable如何进行立即提交和批量提交,以及这两种方法在实际应用中的差异。 1. ADOTable组件介绍 ADOTable组件是Delphi与数据库交互的可视化工具,它可以直接连接到各种数据库,如SQL Server、...
批量导入数据通常有两种方式:直接SQL命令和使用数据导入工具。对于不熟悉SQL的用户,很多数据库管理系统提供了图形化界面,如SQL Server的SSIS(SQL Server Integration Services)、MySQL的LOAD DATA INFILE等,...
下面我们将详细探讨两种在SQL Server中实现这种批量更新的方法。 ### 方法1:使用JOIN进行更新 ```sql UPDATE a SET WtNo = b.NO FROM WT_Task a INNER JOIN WT_BasicInformation b ON a.WtId = b.ID; ``` 在这...
在Yii2.0中,批量更新可以分为两种方法。第一种是使用ActiveRecord的`updateAll()`方法进行条件更新。在提供的代码示例中,我们看到了`batchUpdateAdSchedule`方法的实现,它通过传递条件参数和更新参数来对满足条件...
在批量存取操作中,HBase提供了两种主要的方法:批量写入和批量读取。批量写入通常通过`Put`对象来实现,每个`Put`对象代表一行数据的更新。我们可以创建一个`Put`对象,设置行键(Row Key)、列族(Column Family)...
在CAD数据批量串线方法的研究中,本文提出了一种基于FME的矢量数据批量串线方法。该方法通过深入分析CAD数据的结构和属性,提出了一系列线要素分类规则,以及相应的模板编写思路和实现过程。这种方法简单、快捷、...
Mybatis提供了两种批量更新的方式: 1. **第一种方式**: 在一个`<update>`标签内使用`<foreach>`循环,通过集合中的元素来更新不同的记录。但这种方式的一个限制是,所有被更新的字段值必须相同。例如: ```xml...
下面我们将讨论两种主要方法来实现批量执行: 1. **使用数据库管理工具**: 许多数据库管理工具,如MySQL Workbench、Navicat、SQL Server Management Studio (SSMS) 和 Oracle SQL Developer,都提供了批量执行...
生成Geoprocessor对象变量有两种方式,一种是导入COM接口,这种方式仅能在WINDOWS平台下调用,例如:import win32com.client。 本文为从事国土资源数据管理、数据库质量检查、国土资源信息化等相关工作的人员提供了...
Excel 中刷新数据透视表的两种方法 Excel 中刷新数据透视表的两种方法是会计实务中非常重要的一部分。为了帮助会计行业从业人员更好地掌握财务软件的应用技巧,本文将详细介绍 Excel 中刷新数据透视表的两种方法。 ...
IP地址分为IPv4和IPv6两种类型,通常家庭和小型企业网络多使用IPv4。 批量修改计算机名和IP地址有以下几种方法: 1. **使用脚本**:编写批处理脚本(如Windows的`.bat`文件),利用命令行工具(如`netdom`和`...
该工具支持单个查询和批量查询两种模式。单个查询功能设计得非常直观,用户只需输入电话号码,系统即时返回查询结果,这种实时性使得用户可以快速获取所需信息。而批量查询则针对需要处理大量号码的场景,例如企业...
3. **批量删除**:有两种主要方法可以批量删除满足条件的元素: - **循环遍历删除**:遍历列表,每次遇到符合条件的元素就调用`remove()`方法。但这种方式会改变列表的索引,导致后续元素跳过。所以,推荐使用`...