MyBatis中批量insert
在orcale和mybatis执行批量插入是不一样的。
orcale如下:(这里要注意的是:useGeneratedKeys="false" )
方式1:oracle批量插入使用 insert all into table(...) values(...) into table(...) values(...) select 1 from dual;
<insert id="insertListBatch" parameterType="java.util.List" useGeneratedKeys="false"> INSERT ALL <foreach item="item" index="index" collection="list"> INTO student ( ID, name, age, sex, CREATE_TIME ) VALUES ( #{item.id, jdbcType=NUMERIC}, #{item.name, jdbcType=VARCHAR}, #{item.age, jdbcType=VARCHAR}, #{item.sex, jdbcType=VARCHAR}, #{item.createdTime, jdbcType=NUMERIC} ) </foreach> SELECT 1 FROM DUAL </insert>
方式2: insert into table(...) (select ... from dual) union all (select ... from dual)
<insert id="insertListBatch" parameterType="java.util.List" useGeneratedKeys="false"> INSERT INTO T_APPLAUD ( ID, name, age, sex, CREATE_TIME ) <foreach item="item" index="index" collection="list" separator="union all"> ( SELECT #{item.id}, #{item.name}, #{item.age}, #{item.sex}, #{item.createdTime} FROM DUAL ) </foreach> </insert>
mysq如下:
<insert id="insertListBatch" > insert into student ( id,name,age,sex,createdTime )
values
<foreach collection="list" item="item" index="index" separator=",">
(null,#{item.name},#{item.age},#{item.sex},#{item.createdTime}
</foreach>
</insert>