在後端開發中,迴圈查庫可以說是一種忌諱,因為與資料庫的 IO 互動是十分耗時的行為。
特別是使用雲資料庫時,不僅有磁盤 IO ,還有網路 IO。
因此我們往往會采用一些策略來避免迴圈查庫。
但是新手往往會忘記這個點,寫出不規範的程式碼,
範例程式碼:
for (ModelVO model : modelList) {
Useruser = userService.getById(model.getUserId());
model.setUser(user);
}
在
list
裏的數據比較多的情況下,執行個幾十秒都有可能。
我們可以覆寫成這樣,範例程式碼:
List<Long> userIdList = modelList.stream()
.map(Model::getUserId)
.collect(Collectors.toList());
List<User> users = userService.listByIds(userIdList);
Map<Long, List<User>> idUserMap = users.stream()
.collect(Collectors.groupingBy(User::getId));
modelList.forEach(model -> model.setUser(idUserMap.get(model.getUserId())));
這樣就避免了迴圈查庫(上面的程式碼缺少了判空邏輯,大家自行完善)。
你都是使用什麽方法來避免迴圈查庫呢?歡迎投票並在評論區留下自己的做法。
完整程式碼片段來源於程式碼小抄,歡迎點選進入小程式閱讀!
線上存取:https://www.codecopy.cn/post/gl930t
更多優質程式碼歡迎進入小程式檢視!
往期推薦