周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • Spring
  • SpringMVC
  • Mybatis
  • 安装教程
  • 其他教程
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • Spring
  • SpringMVC
  • Mybatis
  • 安装教程
  • 其他教程
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • Spring

    • 接口设计规范
    • Spring IoC
    • Spring AOP
    • SpringBoot基础
    • SpringBoot 常用注解
    • SpringBoot Conditional注解
    • SpringBoot 组件注入方式
    • SpringBoot 组件Bean生命周期
    • SpringBoot自动配置原理
    • SpringBoot自定义Starter
    • SpringBoot其他功能
    • SpringBoot JdbcTemplate
    • SpringBoot事务
    • SpringBoot文档
    • SpringBoot Starter和BOM区别
    • SpringBoot集成Modbus实现设备
    • 查询优化N+1
      • 查询优化N+1
    • Response设置响应编码
    • Thymeleaf教程
    • Maven教程
    • Tree工具类,轻松搞定树结构
    • 项目代码组织方式
  • SpringMVC

  • Mybatis

  • 安装教程

  • 其他教程

  • 后端
  • Spring
周振林
2025-12-02
目录

查询优化N+1

# 查询优化N+1


// 批量查询用户时,优化订单查询(避免 N+1)
public List<User> getUsersWithOrders(List<Long> userIds) {
  // 1. 批量查主表:用户(1次查询)
  List<User> users = userMapper.selectByIds(userIds);
  if (CollectionUtils.isEmpty(users)) {
    return Collections.emptyList();
  }

  // 2. 提取所有用户id,批量查关联表:订单(1次查询,替代 N 次查询)
  List<Long> ids = users.stream().map(User::getId).collect(Collectors.toList());
  List<Order> orders = orderMapper.selectByUserIds(ids);

  // 3. 手动组装数据(用 Map 优化匹配效率)
  Map<Long, List<Order>> orderMap = orders.stream()
    .collect(Collectors.groupingBy(Order::getUserId));
  users.forEach(user -> user.setOrders(orderMap.getOrDefault(user.getId(), Collections.emptyList())));

  return users;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Last Updated: 2025/12/02, 15:43:10
SpringBoot集成Modbus实现设备
Response设置响应编码

← SpringBoot集成Modbus实现设备 Response设置响应编码→

最近更新
01
项目代码组织方式
12-02
02
Mybatis分页插件
12-02
03
Mybatis动态SQL
12-02
更多文章>
Copyright © 2019-2025 鲁ICP备19032096号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×