Mapper接口定义的方法
int insertLists(List list);
①带主键自增的批量插入
Mapper.xml文件:
<!-- 批量插入 -->
<insert id="addByUser" parameterType="java.util.List" useGeneratedKeys="false">
insert into ts_app_dxdz(ID, USERID,TYPEID, PZID, ZUID,DQID)
select seq_ts_app_dxdz_id.nextval,cd.* from(
<foreach collection="list" item="item" index="index" separator="union all">
select
#{item.USERID} USERID,
#{item.TYPEID} TYPEID,
#{item.PZ} PZ,
#{item.ZU} ZU,
#{item.DQ} DQ
from dual
</foreach>
) cd
</insert>
注意:
mybatis的这个useGeneratedKeys属性的问题,官网的解释是 允许 JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。
如果不加useGeneratedKeys="false"会报RA-00933:SQL 命令未正确结束的错误
②不需要主键自增批量插入
Mapper.xml文件:
<insert id="insertLists" parameterType="java.util.List" useGeneratedKeys="false">
insert into TS_APP_TMSG (ID, NAME, AGE, PRICE, ADDRESS)
<foreach collection="list" item="item" index="index" open="(" close=")" separator="union">
select
#{item.id},
#{item.name},
#{item.age},
#{item.price},
#{item.address}
from dual
</foreach>
</insert>
<insert id="insertLists" parameterType="java.util.List" useGeneratedKeys="false">
insert into T_STUDENT(ID, NAME, AGE, PRICE, ADDRESS)
select t.* from(
<foreach collection="list" item="item" index="index" separator="union all">
select #{item.id},
#{item.name},
#{item.age},
#{item.price},
#{item.address}
from dual
</foreach>
) t
</insert>