文档章节

postgresql mybatis 批量update

wangyunzhong
 wangyunzhong
发布于 2017/02/24 16:59
字数 325
阅读 709
收藏 0

有些时候需要批量更新,在java中for循环更新效率太慢,通过sql批量执行可以大幅度提升性能。

批量更新demo:

< update id="batchUpdate">
          UPDATE eplus_project_standard
          SET device_type_id = contents.device_type_id,
          type = contents.type,
          project_id = contents.project_id,
          summary = contents.summary,
          detail = contents.detail,
          period_type = contents.period_type,
          period_value = contents.period_value,
          index = contents.index
          FROM (
          VALUES
           <foreach collection ="standards" item="stand" index="index"
           open="" close= "" separator= ",">
              (#{stand.deviceType.id},
               <trim suffix="::jsonb"> #{stand.standard}</trim >
              ,
              #{stand.type},
              #{stand.projectId},
              #{stand.id},
              #{stand.summary},
              #{stand.detail},
              #{stand.periodType},
              #{stand.periodValue},
              #{stand.index})
           </foreach>
          ) as
          contents(device_type_id, standard,type,project_id,id, summary,detail, period_type, period_value, index)
          WHERE
          contents.id
          = eplus_project_standard.id;
     </update >

 

但是有些时候,列的类型为特殊类型。列的value为null,则sql判断不出value应该是什么类型,会抛出错误。我们在sql中指定类型就可以了。

demo:

<update id= "updateBatch">
          update ps_fair_places
           <set >
              fair_id=place.fairId,
              organization_id=place.orgId,
              status=place.status,
               current_interviewer=place.currentInterviewerId,
               current_participant=place.currentParticipantId,
              jobs =place.jobs,
              channel=place.channel:: jsonb,
              allow=place.allow,
              interview_id=place.currentInterviewId,
              start_time=place.startTime:: timestamp without time zone,
              end_time=place.endTime:: timestamp without time zone
           </set>
          from (
          values
           <foreach collection ="fairPlaces" item="p" open= "" close =""
               separator= ",">
               <trim prefix ="(" suffix=")">
                   #{p.id},
                    <choose >
                         <when test ="p.fair != null">#{p.fair.id},</ when>
                         <otherwise >null, </otherwise>
                    </choose>
                    <choose >
                         <when test ="p.org != null">#{p.org.id},</ when>
                         <otherwise >null, </otherwise>
                    </choose>
                   #{p.status},
                    <choose >
                         <when test ="p.currentInterviewer != null">
                             #{p.currentInterviewer.id},
                         </when>
                         <otherwise > null, </otherwise>
                    </choose>
                    <choose >
                         <when test ="p.currentParticipant != null">
                             #{p.currentParticipant.id},
                         </when>
                         <otherwise > null, </otherwise>
                    </choose>
                    <choose >
                         <when test ="p.jobs != null">
                              <trim prefix ="ARRAY[" suffix= "]">
                                   <foreach collection="p.jobs" item ="job" separator=","> #{job.id}
                                   </foreach>
                              </trim>
                             ,
                         </when>
                         <otherwise >
                             null,
                         </otherwise>
                    </choose>
                    <choose >
                         <when test ="p.channel != null">
                             #{p.channel},
                         </when>
                         <otherwise > null, </otherwise>
                    </choose>
                   #{p.allow},
                   #{p.currentInterviewId},
                   #{p.startTime},
                   #{p.endTime}
               </trim>
           </foreach>
          ) as place(
          id,
          fairId,
          orgId,
          status,
          currentInterviewerId,
          currentParticipantId,
          jobs,
          channel,
          allow,
          currentInterviewId,
          startTime,
          endTime
          )
          where place.id = ps_fair_places.id
     </update >

 

© 著作权归作者所有

wangyunzhong
粉丝 9
博文 18
码字总数 11952
作品 0
大连
程序员
私信 提问
PostgreSQL 批量SQL before/after for each row trigger的触发时机、性能差异分析、建议 - 含9.4 , 10版本

标签 PostgreSQL , trigger , row , statement , before , after , s_lock 背景 数据库触发器的触发时机,性能,高并发批量导入时,触发器的性能如何? 批量导入时,before, after触发器在f...

德哥
2018/10/05
0
0
PostgreSQL merge insert(upsert/insert into on conflict) 如何区分数据是INSERT还是UPDATE

背景 使用insert into on conflict update语法,可以支持UPSERT的功能,但是到底这条SQL是插入的还是更新的呢?如何判断 通过xmax字段的值是否不为0,可以判断,如果是UPDATE,XMAX里面会填充...

pg小助手
2018/10/19
0
0
PostgreSQL 社交类好友关系系统实践 - 正反向关系查询加速

标签 PostgreSQL , 好友关系 , 正向关系 , 反向关系 背景 关系系统在很多设计类应用中非常常见,例如查询你有哪些好友,你是哪些人的好友。 又比如我LIKE了哪些人,哪些人LIKE了我。 比如在之...

德哥
2018/04/18
0
0
PostgreSQL 批量导入性能 (采用dblink 异步调用)

标签 PostgreSQL , unlogged table , 批量 , dblink 背景 批量导入数据,怎样能挖掘出系统的比较极限的潜能? 瓶颈通常在哪里? 1、WAL lock 2、INDEX lock 3、EXTEND LOCK 4、autovacuum 干扰...

德哥
2018/05/06
0
0
postgresql插入汉字报错

错误信息:peimsmdb=# select '我';ERROR: character with byte sequence 0xe6 0x88 0x91 in encoding "UTF8" has no equivalent in encoding "LATIN1" 查看客户端字符集:peimsmdb=# show cl......

断臂人
01/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
537
8
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
聊聊DubboDefaultPropertiesEnvironmentPostProcessor

序 本文主要研究一下DubboDefaultPropertiesEnvironmentPostProcessor DubboDefaultPropertiesEnvironmentPostProcessor dubbo-spring-boot-project-2.7.3/dubbo-spring-boot-compatible/au......

go4it
昨天
2
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部