MyBatis批量插入数据

1、说明和注意

数据库支持单条 INSERT 语句有多组值。只需每组值用一对圆括号括起来,多组值之间用逗号分隔即可。

说明和注意:

  1. DAO 层传入的是 List,List 里一个元素代表一条数据,同时 List 放入 Map 中;
  2. XML 中使用 foreach 遍历,每条数据中的元素全部用括号括起来,多条数据之间用逗号分割;
  3. 如果 List 为空,MyBatis 拼接的 SQL 会没有 value 部分,数据库会报错。故在批量插入之前做好数据判断。

2、代码示例

2.1 DAO 部分

@Override
public Integer batchInsert(List<VirtualOrderStatistics> virtualOrderStatisticsList) {
    Map<String, Object> queryMap = Maps.newHashMap();
    queryMap.put("virtualOrderStatisticsList", virtualOrderStatisticsList);
    return this.insert(this.getNameSpace("batchInsert"), queryMap);
}

2.2 SQL 部分

<insert id="batchInsert" parameterType="java.util.Map" useGeneratedKeys="true" keyProperty="id">
    insert into virtual_order_statistics
    (id, count_date, order_count, vendor_id, business_code, time_interval,
      order_success_count, order_fail_count, order_cancel_count,order_refund_count,time_out,
      recharge_time_out, recharge_success_time_out,
      recharge_fail_time_out, recharge_no_response_time_out,
      is_deleted, created, modified)
    values
    <foreach collection="virtualOrderStatisticsList" item="item" index="i" separator=",">
        (#{item.id,jdbcType=INTEGER}, #{item.countDate,jdbcType=TIMESTAMP}, #{item.orderCount,jdbcType=INTEGER}, #{item.vendorId,jdbcType=INTEGER}, #{item.businessCode,jdbcType=VARCHAR}, #{item.timeInterval,jdbcType=INTEGER},
        #{item.orderSuccessCount,jdbcType=INTEGER}, #{item.orderFailCount,jdbcType=INTEGER}, #{item.orderCancelCount,jdbcType=INTEGER}, #{item.orderRefundCount,jdbcType=INTEGER},#{item.timeOut,jdbcType=INTEGER},
        #{item.rechargeTimeOut,jdbcType=INTEGER}, #{item.rechargeSuccessTimeOut,jdbcType=INTEGER},
        #{item.rechargeFailTimeOut,jdbcType=INTEGER}, #{item.rechargeNoResponseTimeOut,jdbcType=INTEGER},
        0, now(), now())
    </foreach>
</insert>

3、参考:

  1. MyBatis 批量插入数据 (MySql) - Admol - 博客园

转载于:https://www.cnblogs.com/buwuliao/p/11346549.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值