spring 如何从链接两个实体/表的GET中打印响应?

2exbekwf  于 2024-01-05  发布在  Spring
关注(0)|答案(1)|浏览(156)

你好=]我是由于一个活动的东西的任务,不知道如何使它工作,希望有人可以帮助:P
我有三个实体:“*person”、"paper“和”*property“。
Person ID是'persCod',papers ID是'serialNumber',并且properties具有'persCod'和'serialNumber'作为ID(复合主键)。
这个想法是一个人(persCod)可以有多个属性,每个属性都是一张给定的纸。
当发送一个GET请求来查找某个属性时,我希望响应主体包含该属性的所有信息+serialNumber等于找到的属性的'paper'的名称。我需要通过它的'persCod' tho搜索属性。

  1. @Data
  2. @Entity
  3. @Table(name = "PERSON")
  4. @NoArgsConstructor
  5. @AllArgsConstructor
  6. public class Person{
  7. @Id
  8. private Long persCod;
  9. private String name;
  10. }

字符串

纸张

  1. @Data
  2. @Entity
  3. @Table(name = "PAPERS")
  4. @NoArgsConstructor
  5. @AllArgsConstructor
  6. public class Paper{
  7. @Id
  8. private Integer serialNumber;
  9. private String paperName;
  10. }

房产

  1. @Data
  2. @Entity
  3. @Table(name = "PROPERTY")
  4. @IdClass(IdProperty.class)
  5. @NoArgsConstructor
  6. @AllArgsConstructor
  7. public class Property {
  8. @Id
  9. private Long persCod;
  10. @Id
  11. private Integer serialNumber;
  12. private String paperName;
  13. private String description;
  14. }

我需要的是,当向localhost:8080/property/{persCodA}发送GET请求时,得到这样的响应:

  1. {
  2. serialNumber: 101010,
  3. paperName: "[the name of the paper which serialNumber also is 101010]",
  4. description: the given description
  5. },
  6. {
  7. serialNumber: 030303,
  8. paperName: "[the name of the paper which serialNumber also is 030303]",
  9. description: the given description
  10. }


不知道我是否解释得足够好,但很高兴得到一些指导=]

sqougxex

sqougxex1#

  • 首先,通过主键persCod查询属于该人员的所有属性。
  • 然后,基于这组属性,循环通过每个属性的字段serialNumber查询关联纸张的paperName。
  • 第三,合并组合查询结果并返回它们。
  • 选择一:
  1. -- Use join query
  2. SELECT pro.serialNumber, pap.paperName, pro.description
  3. FROM propertie pro
  4. LEFT JOIN pape pap
  5. ON pro.serialNumber = pap.serialNumber
  6. WHERE pro.persCod = #{persCod};

字符串

  • 选择二:
  1. public List<PropertyDTO> listByPersCode(String persCode) {
  2. // 1. query property table
  3. List<PropertyDO> propertyDOs = propertyDAO.selectByPersCode(persCode);
  4. // 2. query paper table
  5. List<String> serialNumbers = propertyDOs.stream()
  6. .map(PropertyDO::getSerialNumber)
  7. .collect(Collectors.toList());
  8. List<PaperDO> PaperDOs = paperDAO.selectBatchBySerialNumber(serialNumbers);
  9. // 3. combine the results
  10. Map<String, String> map = PaperDOs.stream()
  11. .collect(Collectors.toMap(PaperDO::getSerialNumber, PaperDO::getPaperName));
  12. return propertyDOs.stream()
  13. .map(propertyConverter::toDTO) // copy object's fields
  14. .peek(e -> e.setPaperName(map.get(e.getSerialNumber())))
  15. .collect(Collectors.toList());
  16. }

展开查看全部

相关问题