MyBatis批量insert map集合

近日项目中使用到了SpringBoot+MyBatis,有些同学估计是来秀实力的,或者说我太菜了~~~

整了个批量insert map集合,还带嵌套的,具体情况如下:

params为入参集合,即Map<String, Object> params,包含入参十来项,下文从中提取其中两项range、id:

Map<String, Object> dataMap= new HashMap<>;

dataMap.put("range",params.get("range"));

dataMap.put("taskId",params.get("id"));

xxxService.addTaskRange(dataMap);//controller调用serviceImpl实现

实际,他是这么写的

xxxService.addTaskRange(new HashMap<String,Object>(){{

     put("range",params.get("range"));

     put("taskId",params.get("id"));

}});

MapUtil.addBaseField(snowflake_task,dataMap);//snowflake_task利用雪花算法取了个id,addBaseField通用字段追加(如创建人、创建时间等)。

注意:range中包含range_org对象集合和range_pc集合。

Mapper.xml文件里,向两张不同的表中insert数据:

<insert id="addTaskRange" parameterType="java.util.Map">
    INSERT INTO tb_namea    (f_taskId,f_orgId,f_allChildren,create_user,create_time,update_user,update_time,tenant_id)
    VALUES
    <foreach collection="range.range_org" item="org" separator="," >
        (#{taskId},#{org.orgId},#{org.allChildren},#{create_user},#{create_time},#{update_user},#{update_time},#{tenantId})
    </foreach>
    ;
    INSERT INTO tb_nameb
    (f_taskId,f_compId,create_user,create_time,update_user,update_time,tenant_id)
    VALUES
    <foreach collection="range.range_pc" item="item" separator="," >
        (#{taskId},#{item},#{create_user},#{create_time},#{update_user},#{update_time},#{tenantId})
    </foreach>
    ;
</insert>

看这SQL写的,也没啥毛病,就是一执行就报错,还报的是sql拼写、传参的错,于是我就把SQL贴出来放数据库执行,然而并没有错,就是放程序里跑就报错。找了小半天不知道是什么问题,然后咱就单条入库试试,尽然成功了!!!!百度了一把,原来是数据库连接配置的时候需要设置mybatis需要支持批量操作,具体配置如下:

jdbc:mysql://127.0.0.1:3306/chksys?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true

问了提交的同事,一口咬定自己全部提交了,自己那儿啥问题没有,咋就整到我这儿就不好使了呢~~~~~

自己还是得认真修炼呀!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值