Oracle与MySql数据库在结合MyBatis框架时批量添加sql语句写法不同点

本文探讨了在Oracle和MySql数据库中,如何在结合MyBatis框架进行批量添加操作的不同之处。Oracle需要设置useGeneratedKeys为false避免错误,而MySql的批量插入可通过separator配置实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值