`
y806839048
  • 浏览: 1120871 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

批量更新两种方法实践

阅读更多

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>
      至此,批量更新功能完成。
 
项目中实际使用案例:
[html] view plain copy
 
  1. <update id="updateForBatch" parameterType="java.util.List">  
  2.       update user_credit_black_list set  
  3.       type=  
  4.       <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">  
  5.         when #{item.id,jdbcType=BIGINT} then #{item.type,jdbcType=VARCHAR}  
  6.       </foreach>  
  7.       ,user_id=  
  8.       <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">  
  9.         when #{item.id,jdbcType=BIGINT} then #{item.userId,jdbcType=BIGINT}  
  10.       </foreach>  
  11.       ,update_time=  
  12.       <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">  
  13.         when #{item.id,jdbcType=BIGINT} then #{item.updateTime,jdbcType=TIMESTAMP}  
  14.       </foreach>  
  15.       ,delete_flg=  
  16.       <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">  
  17.         when #{item.id,jdbcType=BIGINT} then #{item.deleteFlg,jdbcType=BIT}  
  18.       </foreach>  
  19.       ,update_code=  
  20.       <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">  
  21.         when #{item.id,jdbcType=BIGINT} then #{item.updateCode,jdbcType=BIGINT}  
  22.       </foreach>  
  23.       where ID in  
  24.       <foreach collection="list" index="index" item="item" separator="," open="(" close=")">  
  25.         #{item.id,jdbcType=BIGINT}  
  26.       </foreach>  
  27.   </update>  
分享到:
评论

相关推荐

    在Hibernate应用中处理批量更新和批量删除

    本文将深入探讨在Hibernate应用中处理批量更新和批量删除的最佳实践,以及如何避免常见的性能陷阱。 ### 一、批量更新的基本概念 批量更新是指对数据库中的多条记录进行一次性更新操作,相较于单条记录更新,批量...

    Wordpress批量更新文章的软件.zip

    这款工具允许用户一次性上传多篇文章,支持的格式包括TXT和HTML,这两种格式通常用于存储纯文本或包含HTML标签的文本内容。 在WordPress中,手动一篇篇地添加文章可能会非常耗时,尤其是当需要导入大量已有内容或者...

    pycharm 批量修改变量名称的方法

    同时,这两种方法也是PyCharm强大功能的一个体现,它能够帮助开发者在遵循最佳实践的同时,优化代码结构和可读性。在日常的开发工作中,掌握这些批量修改的技巧,能够显著提高处理代码变更的效率。因此,对于想要...

    mybatis执行批量更新batch update 的方法(oracle,mysql两种)

    在MyBatis中,批量更新(batch update)是一种提高数据库操作效率的重要手段,尤其是在处理大量数据更新时。这里我们将详细探讨如何在Oracle和MySQL数据库中使用MyBatis进行批量更新。 1. **Oracle数据库的批量更新...

    易语言批量操作编辑框的方法(批量填充编辑框内容)

    为了更好地实践这两种方法,我们可以参考`content.txt`文件中的示例代码,这可能包含了具体的实现细节。学习和理解这些代码,将有助于加深对易语言批量操作编辑框的理解,并能够在自己的项目中灵活运用。 总的来说...

    面向中小批量生产的一种两阶段质量控制方法研究及应用

    为了解决这些难题,林芳芳、刘飞等人提出了一种适用于中小批量生产的两阶段质量控制方法。 该方法的提出基于对现有质量控制方法的局限性进行深入分析,首先对中小批量生产过程中样本数据量不足、连续抽样样本具有...

    程序主要演示ADOTable立即提交與批量提交的使用方法

    本教程将深入探讨ADOTable如何进行立即提交和批量提交,以及这两种方法在实际应用中的差异。 1. ADOTable组件介绍 ADOTable组件是Delphi与数据库交互的可视化工具,它可以直接连接到各种数据库,如SQL Server、...

    用EXCEL批量导入数据库.rar

    批量导入数据通常有两种方式:直接SQL命令和使用数据导入工具。对于不熟悉SQL的用户,很多数据库管理系统提供了图形化界面,如SQL Server的SSIS(SQL Server Integration Services)、MySQL的LOAD DATA INFILE等,...

    SQLServer批量更新两个关联表数据的方法

    下面我们将详细探讨两种在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实现的批量更新及批量插入功能示例

    在Yii2.0中,批量更新可以分为两种方法。第一种是使用ActiveRecord的`updateAll()`方法进行条件更新。在提供的代码示例中,我们看到了`batchUpdateAdSchedule`方法的实现,它通过传递条件参数和更新参数来对满足条件...

    HBase实现批量存取

    在批量存取操作中,HBase提供了两种主要的方法:批量写入和批量读取。批量写入通常通过`Put`对象来实现,每个`Put`对象代表一行数据的更新。我们可以创建一个`Put`对象,设置行键(Row Key)、列族(Column Family)...

    基于FME的CAD数据批量串线方法研究.pdf

    在CAD数据批量串线方法的研究中,本文提出了一种基于FME的矢量数据批量串线方法。该方法通过深入分析CAD数据的结构和属性,提出了一系列线要素分类规则,以及相应的模板编写思路和实现过程。这种方法简单、快捷、...

    Mybatis批量更新报错问题

    Mybatis提供了两种批量更新的方式: 1. **第一种方式**: 在一个`&lt;update&gt;`标签内使用`&lt;foreach&gt;`循环,通过集合中的元素来更新不同的记录。但这种方式的一个限制是,所有被更新的字段值必须相同。例如: ```xml...

    批量执行SQL文件

    下面我们将讨论两种主要方法来实现批量执行: 1. **使用数据库管理工具**: 许多数据库管理工具,如MySQL Workbench、Navicat、SQL Server Management Studio (SSMS) 和 Oracle SQL Developer,都提供了批量执行...

    基于Python的空间数据批量处理方法.pdf

    生成Geoprocessor对象变量有两种方式,一种是导入COM接口,这种方式仅能在WINDOWS平台下调用,例如:import win32com.client。 本文为从事国土资源数据管理、数据库质量检查、国土资源信息化等相关工作的人员提供了...

    会计实务:Excel中刷新数据透视表的两种方法.pdf

    Excel 中刷新数据透视表的两种方法 Excel 中刷新数据透视表的两种方法是会计实务中非常重要的一部分。为了帮助会计行业从业人员更好地掌握财务软件的应用技巧,本文将详细介绍 Excel 中刷新数据透视表的两种方法。 ...

    局域网批量修改计算机名与IP地址

    IP地址分为IPv4和IPv6两种类型,通常家庭和小型企业网络多使用IPv4。 批量修改计算机名和IP地址有以下几种方法: 1. **使用脚本**:编写批处理脚本(如Windows的`.bat`文件),利用命令行工具(如`netdom`和`...

    批量查询号码归属地

    该工具支持单个查询和批量查询两种模式。单个查询功能设计得非常直观,用户只需输入电话号码,系统即时返回查询结果,这种实时性使得用户可以快速获取所需信息。而批量查询则针对需要处理大量号码的场景,例如企业...

    java批量删除列表内容

    3. **批量删除**:有两种主要方法可以批量删除满足条件的元素: - **循环遍历删除**:遍历列表,每次遇到符合条件的元素就调用`remove()`方法。但这种方式会改变列表的索引,导致后续元素跳过。所以,推荐使用`...

Global site tag (gtag.js) - Google Analytics