ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PG数据库,Mybatis实现批量插入数据(常用三种方案)

2021-10-07 14:04:21  阅读:1021  来源: 互联网

标签:name -- 数据库 update item PG Mybatis test01 id


常见有三种实现方案

表结构:

CREATE TABLE test01 (
    id varchar(64) NOT NULL,
    "name" varchar(64) NULL,
    CONSTRAINT pkey_test01 PRIMARY KEY (id)
);

方案一:

dao接口关键代码

void insertBatch01(List<Test01> test01List);

xml关键代码

<insert id="insertBatch01" parameterType="list">
    INSERT INTO test01 (id, name)
    VALUES
    <foreach collection="list" item="item" index="index" separator=",">
        (
        #{item.id},
        #{item.name}
        )
    </foreach>
    -- on conflict (id) do update set name= 'new_name' -- 存在则更新,根据实际业务选择
</insert>

缺点:在实际使用中,mybatis传入的values是一个List,这里做update的时候,取不到list中的值

方案二:

 -- 批量插入(方式二)

<insert id="insertBatch02" parameterType="java.util.List">
     <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        insert into test01(id, name) values(#{item.id}, #{item.name})
        -- on conflict (id) do update set name = #{item.name} -- 存在则更新,不存在则插入,根据实际需要选择
    </foreach>
</insert>


-- 批量更新

<update id="updateBatch01" parameterType="java.util.List">
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update test01
            set name = #{item.name,jdbcType=VARCHAR}
        where
            id = #{item.id,jdbcType=VARCHAR}
    </foreach>
</update>

方案三:基于其他表构建批量数据,一次插入

insert into test01(id, name)  (查询SQL,查询结果为id, name)

 -- on conflict (id) do update set name = 'name_new' -- 根据实际业务选择

示例:

insert into test01(id, name)  (select 'id1', 'value1')

注意:查询SQL两边的括号()可以不写

标签:name,--,数据库,update,item,PG,Mybatis,test01,id
来源: https://blog.csdn.net/wyj180/article/details/120634402

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有