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

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

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


版权声明:本文为u010953431原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。