mybatis+oracle
由于oracle数据库不支持自增主键,写法上也会有不同,因此在写xml的时候要根据实际情况区分是否useGeneratedKeys
不使用自增主键的方式
方式一:
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="false">
INSERT ALL
<foreach collection="list" item="item" index="index">
INTO TABLE
(
ID,
USERNAME
)
VALUES
(
#{item.id},
#{item.username}
)
</foreach>
SELECT 1 FROM DUAL
</insert>
方式二:使用oracle的insert into select from的方式,区别于mysql,此时separator是union all
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="false">
INSERT INTO TABLE
(
ID,
USERNAME
)
<foreach collection="list" item="item" index="index" separator="union all">
(
SELECT
#{item.id},
#{item.username}
FROM DUAL
)
</foreach>
</insert>
方式三:使用oracle的begin end包裹的方式
<insert id="insertBatch" parameterType="java.util.List">
begin
<foreach collection="list" item="item" index="index" separator=";">
insert into table
(
id,
username
)
values
(
#{item.id},
#{item.username}
)
</foreach>
;end;
</insert>
使用自增主键的方式
前提是在数据库创建好相应的序列
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO TABLE
(
key,
id,
username
)
SELECT seq.nextval key, s.* FROM
(
<foreach collection="list" item="item" separator="union all">
SELECT
#{item.id},
#{item.username
FROM dual
</foreach>
) s
</insert>
mybatis+mysql
<insert id="insertBatch" parameterType="java.util.List">
insert into table(id, username)
values
<foreach collection="list" item="item" separator=";">
(#{item.id},#{item.username})
</foreach>
</insert>