案例一、
<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>
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>