Mybaitis foreach批量insert 以及配合 oracle merge into 函数,批量update和insert
oracle中相当于mysql的replace into函数:merge into
使用方法
普通使用
xml中
<update id="mergeStudents" parameterType="com.alibaba.dto.StudentDTO">
merge into t_student a
using
(
SELECT
#{id} as id,
#{name} as name,
#{age} as age
FROM dual
) b
on (
a.id= b.id
)
when matched then
UPDATE SET
a.name= b.name,
a.age=b.age
when not matched then
INSERT(
a.id,
a.name,
a.age
) VALUES(
b.id,
b.name,
b.age
)
</update>
加上foreach
<update id="mergeStudents" parameterType="com.alibaba.dto.StudentDTO">
merge into t_student a
using
(
<foreach collection="stus" item="item" index="index" open=""
close="" separator="union all">
SELECT
#{item.id,jdbcType=VARCHAR} as id,
#{item.name,jdbcType=VARCHAR} as name,
#{item.age,jdbcType=VARCHAR} as age
FROM dual
</foreach>
) b
on (
a.id= b.id
)
when matched then
UPDATE SET
a.name= b.name,
a.age=b.age
when not matched then
INSERT(
a.id,
a.name,
a.age
) VALUES(
b.id,
b.name,
b.age
)
</update>