【实践】mybatis批量插入map
需求近期项目在测试上出了些问题,主要原因是我们项目中使用的Doris,然后线上和测试环境隔离,线上有数据,Doris没数据,需要将线上数据往测试环境弄一部分,所以写了个小程序导入了一下思路因为不止一张表,所以想着写个通用的代码,把表的部分传进来就可以同步,这样的话,就绝对不能用实体类来传输数据,所以用map,用map还有一个问题是之前没写过map的批量插入,所以稍微查了查,这里做个记录,大家可以看
·
需求
近期项目在测试上出了些问题,主要原因是我们项目中使用的Doris,然后线上和测试环境隔离,线上有数据,Doris没数据,需要将线上数据往测试环境弄一部分,所以写了个小程序导入了一下
思路
因为不止一张表,所以想着写个通用的代码,把表的部分传进来就可以同步,这样的话,就绝对不能用实体类来传输数据,所以用map,
用map还有一个问题是之前没写过map的批量插入,所以稍微查了查,这里做个记录,大家可以看一下
首先是从线上查询的部分,如下:
<select id="search" resultType="java.util.Map">
select * from ${tableName}
order by ${orderBy} desc
limit #{pageNo},#{pageSize}
</select>
然后是插入的部分,如下
<insert id="insert" parameterType="java.util.Map">
insert into ${tableName}
(
<foreach collection="columnMap" item="value" index="key" separator=",">
`${key}`
</foreach>
)
values
<foreach collection="mapList" item="columnMap" separator=",">
(
<foreach collection="columnMap" item="value" index="key" separator=",">
#{value}
</foreach>
)
</foreach>
</insert>
最后是程序的部分,如下:
public Result index(String tableName, String orderBy,Integer pageNo,Integer pageSize) {
List<Map<String,Object>> resultList= dorisSearchMapper.search(tableName,orderBy,pageNo,pageSize);
Map<String,Object> map=resultList.get(0);
dorisTestMapper.insert(tableName,map,resultList);
return ResultBuilder.success();
}
注意
注意一下,dorisSearchMapper和dorisTestMapper是两个源
还有一点需要注意的地方,使用map接收返回值,有可能出现字段丢失的情况,一般出现在值为NULL的时候,此时请在mybatis的配置文件里面加上如下配置
<setting name="callSettersOnNulls" value="true"/>
以上,主要是自己做个记录,希望顺便帮到大家。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)