今日代碼 PK | 避免循環(huán)查庫(kù)
在后端開(kāi)發(fā)中,循環(huán)查庫(kù)可以說(shuō)是一種忌諱,因?yàn)榕c數(shù)據(jù)庫(kù)的 IO 交互是十分耗時(shí)的行為。
特別是使用云數(shù)據(jù)庫(kù)時(shí),不僅有磁盤(pán) IO ,還有網(wǎng)絡(luò) IO。
因此我們往往會(huì)采用一些策略來(lái)避免循環(huán)查庫(kù)。
但是新手往往會(huì)忘記這個(gè)點(diǎn),寫(xiě)出不規(guī)范的代碼,
示例代碼:
for (ModelVO model : modelList) {
User user = userService.getById(model.getUserId());
model.setUser(user);
}
在list里的數(shù)據(jù)比較多的情況下,執(zhí)行個(gè)幾十秒都有可能。
我們可以改寫(xiě)成這樣,示例代碼:
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())));
這樣就避免了循環(huán)查庫(kù)(上面的代碼缺少了判空邏輯,大家自行完善)。
你都是使用什么方法來(lái)避免循環(huán)查庫(kù)呢?歡迎投票并在評(píng)論區(qū)留下自己的做法。
完整代碼片段來(lái)源于代碼小抄,歡迎點(diǎn)擊進(jìn)入小程序閱讀!
在線訪問(wèn):https://www.codecopy.cn/post/gl930t
更多優(yōu)質(zhì)代碼歡迎進(jìn)入小程序查看!
往期推薦
評(píng)論
圖片
表情
