巧用java8的stream流的.collect(Collectors.toMap(arg1,arg2))

最近公司接手了一个低代码二次开发平台的需求,需要连接多张表的数据然后展示到界面上。

按照java的sql思路,我们直接通过left join去关联表就行了,但是该低代码平台有对sql连表查询有限制,就是有些表它是存在一个domainKey的,实体表的domainKey如果不相同的话连表是不允许的。所以就无法使用连表了。

那么我的做法就是直接查询一张表,然后把需要连表的那些id都查询来,

也就是select xxx,xxx,xxx_id,yyy_id,ddd_id from xxx_table.

然后执行完sql之后的返回结果res进行解析。

一开始我是直接想在for循环里面,每一次遍历就调用一次sql通过id去查表。但是这样不行。不能在for循环,每次遍历去调用sql,这样会占用sql连接,造成资源占据大的情况。

所以最终的想法,就是单独查询xxx_id对应表名的数据,查询xxx_id对应表名的数据,查询ddd_id对应表名的数据。

然后再将每个sql对应的数据进行map映射成下面这中结构:

Map<key,value> => Map<id,object>

现在我写出一个例子:

然后我们就可以在遍历的时候,直接调用该方法就行了。

如下:

testDBResult.stream().foreach((arg) -> {
    arg.setXXXName(map.get(arg.getXXXId()) == null ? "" : map.get(arg.getXXXId()).getXXXName());
    arg.setYYYName(map.get(arg.getYYYId()) == null ? "" : map.get(arg.getYYYId())).getYYYName();
    arg.setDDDName(map.get(arg.getDDDId()) == null ? "" : map.get(arg.getDDDId())).getDDDName();
})

总结:

        巧用java8的stream流的.collect(Collectors.toMap(arg1,arg2))适用于通过返回结果的id查对应表的某一个数据。当然可以直接连表是最好的。

最后:

        如果大家觉得这篇文章对你们有所帮助的话,麻烦点个免费的赞赞,也祝各位码农在未来的IT的道路上越走越远,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值