Oracle+MyBatis实现批量添加的写法
<!--批量添加-->
Dao写法:Integer insertBatchUser(List<User> list);
写法一:
<insert id="insertBatchUser" parameterType="java.util.List" useGeneratedKeys="false">
INSERT INTO USER_TABLE (ID, USERNAME, PASSWORD, PHONE, IDCARD,ADDRESS)
<foreach collection="list" item="item" index="index" separator="union all">
( select
#{item.id,jdbcType=VARCHAR},
#{item.userName,jdbcType=VARCHAR},
#{item.password,jdbcType=VARCHAR},
#{item.phone,jdbcType=VARCHAR},
#{item.idCard,jdbcType=VARCHAR},
#{item.address,jdbcType=VARCHAR}
from DUAL
)
</foreach>
</insert>
写法二:
<insert id="insertBatchUser" parameterType="java.util.List" useGeneratedKeys="false">
INSERT ALL
<foreach collection="list" item="item" index="index">
INTO USER_TABLE (ID, USERNAME, PASSWORD, PHONE, IDCARD,ADDRESS)
VALUES (
#{item.id,jdbcType=VARCHAR},
#{item.userName,jdbcType=VARCHAR},
#{item.password,jdbcType=VARCHAR},
#{item.phone,jdbcType=VARCHAR},
#{item.idCard,jdbcType=VARCHAR},
#{item.address,jdbcType=VARCHAR}
)
</foreach>
SELECT 1 FROM DUAL
</insert>
写法一注意点:
1:useGeneratedKeys="false"
在xml映射器中配置的useGeneratedKeys参数只会对xml映射器产生影响,且在settings元素中设置的全局useGeneratedKeys参数值对于xml映射器不产生任何作用。同时Oracle 这样不支持自增主键列的数据库,如果把useGeneratedKeys 参数配置为 true,在插入多条数据时则可能会出现 ORA-00933: SQL command not properly ended这样的错误。这时,可以将 useGeneratedKeys 配置为 false,或者为了保证兼容性,使用 mybatis 提供的 selectKey 手动提供类似自增序列的效果。
2:separator="union all"
MySql+MyBatis实现批量添加的写法
<insert id ="insertBatchUser" parameterType="java.util.List" >
INSERT INTO USER_TABLE (ID, USERNAME, PASSWORD, PHONE, IDCARD,ADDRESS)
VALUES
<foreach collection ="list" item="item" index= "index" separator =",">
(
#{item.id,jdbcType=VARCHAR},
#{item.userName,jdbcType=VARCHAR},
#{item.password,jdbcType=VARCHAR},
#{item.phone,jdbcType=VARCHAR},
#{item.idCard,jdbcType=VARCHAR},
#{item.address,jdbcType=VARCHAR}
)
</foreach >
</insert >