> getTopTerminals( -6ren">
gpt4 book ai didi

java - 优化 SQL 查询的数量

转载 作者:行者123 更新时间:2023-11-29 04:09:30 25 4
gpt4 key购买 nike

我使用此代码生成包含数据的图表:

    @GetMapping("/terminals")
public ResponseEntity<Map<String, List<TopTerminalsDTO>>> getTopTerminals(
@RequestParam(value = "start_date", required = true) String start_date,
@RequestParam(value = "end_date", required = true) String end_date) {


final List<PaymentTransactionsDailyFacts> list = dashboardService.findTop_Terminals(start_dateTime, end_dateTime);

final Collector<PaymentTransactionsDailyFacts, List<TopTerminalsDTO>, List<TopTerminalsDTO>> terminalsCollector = Collector
.of(ArrayList::new, (terminals, p) -> terminals.add(mapper.toTopTerminalsDTO(p)),
(accumulator, terminals) -> {
accumulator.addAll(terminals);
return accumulator;
});

final Map<String, List<TopTerminalsDTO>> final_map = list.stream().filter(p -> p.getTerminal_id() != null)
.collect(Collectors.groupingBy(p -> getTerminalName(p.getTerminal_id()), terminalsCollector));

return ResponseEntity.ok(final_map);
}

private String getTerminalName(Integer id) {
Optional<Terminals> obj = terminalService.findById(id);
return obj.map(Terminals::getName).orElse("");
}

但我注意到 getTerminalName 被调用超过 10 次来从数字中翻译名称。你知道我如何通过一些优化来减少调用次数吗?

最佳答案

修改findTop_TerminalsPaymentTransactionsDailyFacts包含名称(使用 SQL LEFT JOIN 子句)。


或者,扫描列表中的所有终端 ID,然后调用 List<Terminals> list = terminalService.findByIds(idList);使用 SQL 获取所有这些终端的方法 IN条款。

注意:注意数量限制 ?标记可以在 SQL 语句中。

然后构建一个Map<Integer, String>将终端 ID 映射到名称,并替换 getTerminalName带有 map 查找的方法。

关于java - 优化 SQL 查询的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com