diff --git a/src/main/java/org/springblade/modules/martial/service/impl/MartialResultServiceImpl.java b/src/main/java/org/springblade/modules/martial/service/impl/MartialResultServiceImpl.java index 978ba03..244c167 100644 --- a/src/main/java/org/springblade/modules/martial/service/impl/MartialResultServiceImpl.java +++ b/src/main/java/org/springblade/modules/martial/service/impl/MartialResultServiceImpl.java @@ -699,13 +699,28 @@ public class MartialResultServiceImpl extends ServiceImpl results = this.list(wrapper); - // 填充选手信息 - for (MartialResult result : results) { - if (result.getAthleteId() != null) { - MartialAthlete athlete = athleteService.getById(result.getAthleteId()); - if (athlete != null) { - result.setPlayerName(athlete.getPlayerName()); - result.setTeamName(athlete.getTeamName()); + // Batch query athlete information to avoid N+1 query problem + if (!results.isEmpty()) { + List athleteIds = results.stream() + .map(MartialResult::getAthleteId) + .filter(java.util.Objects::nonNull) + .distinct() + .collect(java.util.stream.Collectors.toList()); + + if (!athleteIds.isEmpty()) { + List athletes = athleteService.listByIds(athleteIds); + java.util.Map athleteMap = athletes.stream() + .collect(java.util.stream.Collectors.toMap(MartialAthlete::getId, a -> a)); + + // Fill athlete information in memory + for (MartialResult result : results) { + if (result.getAthleteId() != null) { + MartialAthlete athlete = athleteMap.get(result.getAthleteId()); + if (athlete != null) { + result.setPlayerName(athlete.getPlayerName()); + result.setTeamName(athlete.getTeamName()); + } + } } } } @@ -725,13 +740,28 @@ public class MartialResultServiceImpl extends ServiceImpl results = this.list(wrapper); - // 填充选手信息 - for (MartialResult result : results) { - if (result.getAthleteId() != null) { - MartialAthlete athlete = athleteService.getById(result.getAthleteId()); - if (athlete != null) { - result.setPlayerName(athlete.getPlayerName()); - result.setTeamName(athlete.getTeamName()); + // Batch query athlete information to avoid N+1 query problem + if (!results.isEmpty()) { + List athleteIds = results.stream() + .map(MartialResult::getAthleteId) + .filter(java.util.Objects::nonNull) + .distinct() + .collect(java.util.stream.Collectors.toList()); + + if (!athleteIds.isEmpty()) { + List athletes = athleteService.listByIds(athleteIds); + java.util.Map athleteMap = athletes.stream() + .collect(java.util.stream.Collectors.toMap(MartialAthlete::getId, a -> a)); + + // Fill athlete information in memory + for (MartialResult result : results) { + if (result.getAthleteId() != null) { + MartialAthlete athlete = athleteMap.get(result.getAthleteId()); + if (athlete != null) { + result.setPlayerName(athlete.getPlayerName()); + result.setTeamName(athlete.getTeamName()); + } + } } } } @@ -740,4 +770,3 @@ public class MartialResultServiceImpl extends ServiceImpl