Mybatis的foreach批量插入数据

  作者:记性不好的阁主

案例一、


<if test="checkRepeat">
<foreach collection="demoBodyList" item="demoBody" separator=";">
INSERT INTO demo
(a,b,c,d,e,f)
SELECT
#{demoBody.a,jdbcType=INTEGER},
#{demoBody.b,jdbcType=INTEGER},
#{demoBody.c,jdbcType=INTEGER},
#{demoBody.d,jdbcType=INTEGER},
#{demoBody.e,jdbcType=INTEGER},
#{demoBody.f,jdbcType=INTEGER}
FROM dual WHERE NOT EXISTS (
SELECT a,b,c,d,e,f FROM demo
WHERE
a=#{demoBody.a,jdbcType=INTEGER}
AND b=#{demoBody.b,jdbcType=INTEGER}
AND c=#{demoBody.c,jdbcType=INTEGER}
AND d=#{demoBody.d,jdbcType=INTEGER}
AND e=#{demoBody.e,jdbcType=INTEGER}
)
</foreach>
</if>
<if test="!checkRepeat">
INSERT INTO demo
(a,b,c,d,e,f)
VALUES
<foreach collection="demoBodyList" item="demoBody" separator=",">
(
#{demoBody.a,jdbcType=INTEGER},
#{demoBody.b,jdbcType=INTEGER},
#{demoBody.c,jdbcType=INTEGER},
#{demoBody.d,jdbcType=INTEGER},
#{demoBody.e,jdbcType=INTEGER},
#{demoBody.f,jdbcType=INTEGER}
)
</foreach>
</if>


若checkRepeat为true,那么会根据字段[a,b,c,d,e]批量插入或更新,反之直接批量插入


案例二、批量插入并更新


<foreach collection="demoBodyList" item="demoBody" separator=";">
INSERT INTO demo
(unique_a,b,c,d,e,f,g,h,i,j)
VALUES
(
#{demoBody.a,jdbcType=INTEGER},
#{demoBody.b,jdbcType=INTEGER},
#{demoBody.c,jdbcType=INTEGER},
#{demoBody.d,jdbcType=INTEGER},
#{demoBody.e,jdbcType=INTEGER},
#{demoBody.f,jdbcType=INTEGER},
#{demoBody.g,jdbcType=INTEGER},
#{demoBody.h,jdbcType=INTEGER},
#{demoBody.i,jdbcType=INTEGER},
#{demoBody.j,jdbcType=INTEGER}
)
ON DUPLICATE KEY UPDATE
b=VALUES(b),
c=VALUES(c),
d=VALUES(d),
e=VALUES(e),
f=VALUES(f),
g=VALUES(g),
h=VALUES(h),
i=VALUES(i),
j=VALUES(j)
</foreach>


批量插入并更新,前提将a字段设置为唯一键,若插入的a字段已存在,那么更新ON DUPLICATE KEY UPDATE下的字段


相关推荐

评论 抢沙发

表情

分类选择