zl程序教程

您现在的位置是:首页 >  后端

当前栏目

springboot-mybaits 的 on duplicate key update 批量insert

SpringBoot批量On Key update INSERT Duplicate MyBaits
2023-09-27 14:22:12 时间

一 案例一

1.1 数据表操作

在mybaits中使用insert into xx   values(xxx) on duplicate key update  

前提是数据库数据表设置唯一主键:

1.2 dao层操作

dao层:

public void batchAddOperateTaskTotal(@Param("operateTaskStatisticsList") List<DailyOperateTaskStatistics> operateTaskStatisticsList);//工单数据按天批量入库

1.3 mapper 层操作

mapper的配置:

<!-- 实现批量添加数据  -->
    <insert id="batchAddOperateTaskTotal" parameterType="com.baojia.backstage.sptools.bo.DailyOperateTaskStatistics">
        <!--opreate_task_id -->
            insert into  daily_operatetask_statistics (search_day,company_id,operate_area_id,exchage_count,back_count,
        check_count,dispatch_count,find_count,no_use2days_count,no_use5days_count,time_type,create_time,update_time
        )
        values
        <foreach collection="operateTaskStatisticsList" index="index" item="item" separator=",">
            (
            #{item.searchDay,jdbcType=DATE},
            #{item.companyId,jdbcType=INTEGER}, #{item.operateAreaId,jdbcType=INTEGER}, #{item.exchageCount,jdbcType=INTEGER},
            #{item.backCount,jdbcType=INTEGER}, #{item.checkCount,jdbcType=INTEGER},#{item.dispatchCount,jdbcType=INTEGER},
            #{item.findCount,jdbcType=INTEGER},#{item.noUse2DaysCount,jdbcType=INTEGER},#{item.noUse5DaysCount,jdbcType=INTEGER},
            #{item.TimeType,jdbcType=INTEGER}, now(),now()
            )
        </foreach>
            on duplicate key update
            search_day=values(search_day),company_id=values(company_id),operate_area_id=values(operate_area_id),
            exchage_count=values(exchage_count),back_count= values(back_count),check_count=values(check_count),
            dispatch_count=values(dispatch_count),find_count=values(find_count),no_use2days_count=values(no_use2days_count),
            no_use5days_count=values(no_use5days_count),time_type=values(time_type),update_time=now() <!-- 这里少一个create_time=now()的赋值,作用是重复数据,create_time的时间不发生改变  -->


    </insert>

注意:on  duplicate key update 后面的数据表字段的赋值values()里面也是数据表字段,并不是前端字段。

二  案例2

2.1 dao层

//批量更新
public int batchAddOrUpdate(List<GlPreWarnConfig> glPreWarnConfigsList);

2.2 mapper层

1.说明:

 详细代码:

<!-- 将故障详情信息入库 -->
 <insert id="batchAddOrUpdate"  parameterType="java.util.List">
  insert into  gl_pre_warn_config (
  gl_data_point_code,pre_warn_high_rule_id,pre_warn_high_line_id,pre_warn_high_operator,pre_warn_high_limit,pre_high_limit_include_status,
  pre_warn_low_rule_id,pre_warn_low_line_id,pre_warn_low_operator,pre_warn_low_limit,pre_low_limit_include_status,dispatch_status,create_time,update_time
  )
  values
  <foreach collection="list" item="item" index="index" separator=",">
   (
   #{item.glDataPointCode},
   #{item.preWarnHighRuleId},
   #{item.preWarnHighLineId},
   #{item.preWarnHighOperator},
   #{item.preWarnHighLimit},
   #{item.preHighLimitIncludeStatus},
   #{item.preWarnLowRuleId},
   #{item.preWarnLowLineId},
   #{item.preWarnLowOperator},
   #{item.preWarnLowLimit},
   #{item.preLowLimitIncludeStatus},
   #{item.dispatchStatus},
   #{item.createTime},
   #{item.updateTime}
   )
  </foreach>
  ON DUPLICATE KEY UPDATE
  gl_data_point_code=VALUES(gl_data_point_code),
  pre_warn_high_rule_id=VALUES(pre_warn_high_rule_id),
  pre_warn_high_line_id=VALUES(pre_warn_high_line_id),
  pre_warn_high_operator=VALUES(pre_warn_high_operator),
  pre_warn_high_limit=VALUES(pre_warn_high_limit),
  pre_high_limit_include_status=VALUES(pre_high_limit_include_status),
  pre_warn_low_rule_id=VALUES(pre_warn_low_rule_id),
  pre_warn_low_line_id=VALUES(pre_warn_low_line_id),
  pre_warn_low_operator=VALUES(pre_warn_low_operator),
  pre_warn_low_limit=VALUES(pre_warn_low_limit),
  pre_low_limit_include_status=VALUES(pre_low_limit_include_status),
  dispatch_status=VALUES(dispatch_status),
  -- create_time=VALUES(create_time),
  update_time=now()
 </insert>