今天遇到一个批量保存数据的问题,很自然的想到了使用insert into values(),()…这种方式保存数据,于是在mybatis配置文件中使用如下配置:
<insert id="saveBatch" parameterType="java.util.List">
insert into T_PA_DATE (FID, FDATE_VALUE, FSELECTED,
FDELETED)
values
<foreach collection="list" item="date" separator=",">
(#{date.id,jdbcType=DECIMAL}, #{date.dateValue,jdbcType=TIMESTAMP}, #{date.selected,jdbcType=DECIMAL},
#{date.deleted,jdbcType=DECIMAL})
</foreach>
</insert>
结果不能sql报错:未正确结束命令行。
注意:本人使用的是oracle数据库,这种方式在mysql数据库上指令没有问题。
于是又想到了一跳:inset all into values() into tablename values() ,于是在mybatis中使用如下配置:
<insert id="saveBatch" parameterType="java.util.List">
insert all into T_PA_DATE (FID, FDATE_VALUE, FSELECTED,
FDELETED)
values
<foreach collection="list" item="date" separator="into T_PA_DATE values">
(#{date.id,jdbcType=DECIMAL}, #{date.dateValue,jdbcType=TIMESTAMP}, #{date.selected,jdbcType=DECIMAL},
#{date.deleted,jdbcType=DECIMAL})
</foreach>
select 1 from dual
</insert>
执行成功。
说明:
1.最后跟的selecr 1 from dual语句中的dual表可以被替换为任何一个只要不是T_PA_DATE 的表
2.Oralce 9i以上版本