最近一直再做List的批量入库操作,总结了两种批量入库的方式:
第一种:
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO BeatDataTable
(MSGTIMESTAMP,DEVICENUM,LINENUM,RAILLINENUM,LOCOMOTIVE,TRAINNUM)
<foreach collection ="list" item="msg" index="index" separator="union all" >
select #{msg.timestamp}, #{msg.DeviceNum}, #{msg.lineNum}, #{msg.railLineNum},
#{msg.locNumStr}, #{msg.TrainNumStr}
from dual
</foreach >
</insert>
第二种:
<insert id="insertBatch" parameterType="java.util.List">
INSERT ALL
<foreach collection="list" item="item" index="index">
into BeatDataTable
(
DISCTIME,ETCSID,LRBG,MSGTYPE,
ISCRCPASS
)
values
(
to_timestamp(#{item.disctime},'yyyy-mm-dd hh24:mi:ss:ff6'),
#{item.etcsid},#{item.lrbg},#{item.msgtype},
#{item.iscrcpass}
)
</foreach>
select 1 from dual
</insert>
两种方式都可以正常运行,但我测试了几万条数据发现,第一种的性能要比第二种好很多,数据量不大的情况下使用哪种都行,数据量大的话,还是推荐使用第一种,要快很多