m0_73269192 2024-09-24 21:50 采纳率: 41.6%
浏览 7

主表子表left join问题

主表一条数据,子表两条数据。left join之后查询出两条数据。怎么把子表的数据加到主表实体类中 子表的list集合,前台展示的时候只展示一条,点击修改时可以看到两条子表数据

  • 写回答

2条回答 默认 最新

  • 科技梦想家 2024-09-25 03:34
    关注

    以下内容由AIGC 及 gpt.4o 科技梦想家编程波士 共同为您回答解决方案、有用望采纳☀️☀️:

    在 Java 和 Spring Boot 中处理主表和子表的 LEFT JOIN 查询,并将子表的数据封装到主表的实体类中,可以按照以下步骤进行:
    1. 定义实体类
      首先,定义主表和子表的实体类。主表应该包含一个子表的列表。
    
    @Entity
    public class Parent {
        @Id
        private Long id;
        private String name;
    
        @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
        private List<Child> children = new ArrayList<>();
    
        // getters and setters
    }
    
    @Entity
    public class Child {
        @Id
        private Long id;
        private String detail;
    
        @ManyToOne
        @JoinColumn(name = "parent_id")
        private Parent parent;
    
        // getters and setters
    }
    
    
    1. 编写 Repository
      使用 Spring Data JPA 创建一个 repository,用于查询数据。
    
    
    public interface ParentRepository extends JpaRepository<Parent, Long> {
        @Query("SELECT p FROM Parent p LEFT JOIN FETCH p.children WHERE p.id = :id")
        Parent findByIdWithChildren(@Param("id") Long id);
    }
    3. 编写 Service
    在服务层中调用 repository,获取主表数据及其对应的子表数据。
    
    java
    @Service
    public class ParentService {
        @Autowired
        private ParentRepository parentRepository;
    
        public Parent getParentWithChildren(Long id) {
            return parentRepository.findByIdWithChildren(id);
        }
    }
    
    
    1. 控制器处理请求
      在控制器中处理请求,将数据传递给前端。
    
    @RestController
    @RequestMapping("/parents")
    public class ParentController {
        @Autowired
        private ParentService parentService;
    
        @GetMapping("/{id}")
        public ResponseEntity<Parent> getParent(@PathVariable Long id) {
            Parent parent = parentService.getParentWithChildren(id);
            return ResponseEntity.ok(parent);
        }
    }
    
    
    1. 前端展示
      在前端展示时,可以使用 JavaScript 来控制显示和修改的逻辑。例如,展示主表数据时只展示一条子表数据,而在点击修改时显示所有子表数据。
    
    <!-- 示例 HTML -->
    <div>
        <h1>{{ parent.name }}</h1>
        <h2>子表数据</h2>
        <div v-for="child in parent.children.slice(0, 1)" :key="child.id">
            {{ child.detail }}
        </div>
        <button @click="showAllChildren">修改</button>
    </div>
    
    
    
    <template v-if="showAll">
        <div v-for="child in parent.children" :key="child.id">
            {{ child.detail }}
        </div>
    </template>
    
    
    
    1. 处理修改逻辑
      在点击修改按钮后,显示所有子表数据并允许用户进行编辑。

    总结
    以上步骤展示了如何在 Spring Boot 中通过 LEFT JOIN 获取主表和子表的数据,并将子表数据封装到主表实体类中。在前端,你可以控制展示逻辑,以满足不同的需求。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 9月24日
  • 创建了问题 9月24日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?