Oracle+MyBatis实现批量添加的写法
Dao写法:Integer insertBatchUser(List list);
写法一:
INSERT INTO USER_TABLE (ID, USERNAME, PASSWORD, PHONE, IDCARD,ADDRESS)
( 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
)
写法二:
INSERT ALL
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}
)
SELECT 1 FROM DUAL
写法一注意点:
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 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}
)