最近公司接手了一個低代碼二次開發平臺的需求,需要連接多張表的數據然后展示到界面上。
按照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的道路上越走越遠,謝謝。