mybatis collection多级嵌套查询

妖狐艹你老母 2022-10-22 12:58 303阅读 0赞

mybatis collection多级嵌套查询

需求:一个页面有多个模块,一个模块有多个对应的图片,需要查询出来的json格式需要三层嵌套

实体类

  1. /** * (MesaMenu)实体类 * * @author ran * @since 2021-03-17 11:38:27 */
  2. @Data
  3. @NoArgsConstructor
  4. public class MesaMenu implements Serializable {
  5. private static final long serialVersionUID = 759002313430491430L;
  6. /** * 台面菜单表主键id */
  7. private Long id;
  8. /** * 菜单名称 */
  9. private String menuName;
  10. /** * 菜单路由 */
  11. private String menuRoute;
  12. /** * 是否显示0代表显示,1代表不显示默认0 */
  13. private Object isShow;
  14. /** * 菜单名称中文 */
  15. private String menuNameCn;
  16. /** * 菜单排序 */
  17. private Integer sort;
  18. }
  19. /** * (MesaMenuModule)实体类 * * @author ran * @since 2021-03-17 11:38:28 */
  20. @Data
  21. @NoArgsConstructor
  22. public class MesaMenuModule implements Serializable {
  23. private static final long serialVersionUID = 520568918307726506L;
  24. /** * 模块菜单对应表主键id */
  25. private Long id;
  26. /** * 模块对应的菜单id */
  27. private Long mesaMenuId;
  28. /** * 模块名字 */
  29. private String moduleName;
  30. /** * 模块名字中文 */
  31. private String moduleNameCn;
  32. private List<ModuleImg> moduleImgs;
  33. }
  34. /** * (ModuleImg)实体类 * * @author ran * @since 2021-03-17 11:38:28 */
  35. @Data
  36. @NoArgsConstructor
  37. public class ModuleImg implements Serializable {
  38. private static final long serialVersionUID = 886861501934746787L;
  39. /** * 模块图片对应表主键id */
  40. private Long id;
  41. /** * 模块id */
  42. private Long moduleId;
  43. /** * 图片名称 */
  44. private String imgName;
  45. /** * 图片路径 */
  46. private String imgUrl;
  47. }

controller层

  1. /** * (MesaMenu)表控制层 * * @author ran * @since 2021-03-17 11:36:38 */
  2. @RestController
  3. @RequestMapping("mesaMenu")
  4. @ApiDocGroup("菜单")
  5. public class MesaMenuFacade {
  6. /** * 服务对象 */
  7. @Resource
  8. private MesaMenuService mesaMenuService;
  9. @GetMapping("mesaMenuList")
  10. public RestResponse mesaMenuList() {
  11. return this.mesaMenuService.mesaMenuList();
  12. }
  13. }

service层

  1. /** * (MesaMenu)表服务接口 * * @author ran * @since 2021-03-17 11:39:06 */
  2. public interface MesaMenuService {
  3. RestResponse mesaMenuList();
  4. }

serviceImpl层

  1. /** * (MesaMenu)表服务实现类 * * @author ran * @since 2021-03-17 11:39:07 */
  2. @Service("mesaMenuService")
  3. public class MesaMenuServiceImpl implements MesaMenuService {
  4. @Resource
  5. private MesaMenuMapper mesaMenuMapper;
  6. @Override
  7. public RestResponse mesaMenuList() {
  8. List<VoMesaMenu> voMesaMenus = mesaMenuMapper.queryMesaMenuList();
  9. return RestResponse.success(voMesaMenus);
  10. }
  11. }

mapper层

  1. /** * (MesaMenu)表数据库访问层 * * @author ran * @since 2021-03-17 11:38:43 */
  2. @Mapper
  3. public interface MesaMenuMapper {
  4. List<VoMesaMenu> queryMesaMenuList();
  5. }

sql

  1. <select id="queryMesaMenuList" resultMap="queryMesaMenuList">
  2. select
  3. m.ID mID, m.MENU_NAME mMENU_NAME, m.MENU_ROUTE mMENU_ROUTE, m.IS_SHOW mIS_SHOW, m.MENU_NAME_CN mMENU_NAME_CN, m.SORT mSORT,
  4. mo.MODULE_NAME moMODULE_NAME,mo.ID moID, mo.MODULE_NAME_CN moMODULE_NAME_CN,mo.MESA_MENU_ID moMESA_MENU_ID,
  5. mi.ID miID,mi.IMG_NAME miIMG_NAME,mi.IMG_URL miIMG_URL
  6. from mesa_menu m
  7. left join mesa_menu_module mo on m.ID = mo.MESA_MENU_ID
  8. left join module_img mi on mo.ID = mi.MODULE_ID
  9. </select>
  10. <resultMap id="queryMesaMenuList" type="com.mesa.domain.vo.VoMesaMenu">
  11. <id property="id" column="mID"/>
  12. <result property="menuName" column="mMENU_NAME"/>
  13. <result property="menuRoute" column="mMENU_ROUTE"/>
  14. <result property="isShow" column="mIS_SHOW"/>
  15. <result property="menuNameCn" column="mMENU_NAME_CN"/>
  16. <result property="sort" column="mSORT"/>
  17. <collection property="mesaMenuModules" ofType="com.mesa.domain.entity.MesaMenuModule">
  18. <id property="id" column="moID"/>
  19. <result property="mesaMenuId" column="moMESA_MENU_ID"/>
  20. <result property="moduleName" column="moMODULE_NAME"/>
  21. <result property="moduleNameCn" column="moMODULE_NAME_CN"/>
  22. <collection property="moduleImgs" ofType="com.mesa.domain.entity.ModuleImg">
  23. <id property="id" column="miID"/>
  24. <result property="imgName" column="miIMG_NAME"/>
  25. <result property="imgUrl" column="miIMG_URL"/>
  26. </collection>
  27. </collection>
  28. </resultMap>

返回的json数据格式

  1. {
  2. "status": 200,
  3. "message": "SUCCESS",
  4. "result": [
  5. {
  6. "id": 1,
  7. "menuName": "homePage",
  8. "menuRoute": "/homePage",
  9. "isShow": 0,
  10. "menuNameCn": "首页",
  11. "sort": 0,
  12. "mesaMenuModules": [
  13. {
  14. "id": 1,
  15. "mesaMenuId": 1,
  16. "moduleName": "publicSector",
  17. "moduleNameCn": "公共部分",
  18. "moduleImgs": [
  19. {
  20. "id": 1,
  21. "moduleId": null,
  22. "imgName": "公共图片",
  23. "imgUrl": "https://tpl-c8d9f61-pic-tpl.websiteonline.cn/upload/banner_02_gbon.jpg"
  24. }
  25. ]
  26. },
  27. {
  28. "id": 2,
  29. "mesaMenuId": 1,
  30. "moduleName": "aboutUs",
  31. "moduleNameCn": "关于我们",
  32. "moduleImgs": [
  33. {
  34. "id": 2,
  35. "moduleId": null,
  36. "imgName": "关于我们大厦图片",
  37. "imgUrl": "https://tpl-c8d9f61-pic-tpl.websiteonline.cn/upload/news_03_dz52.png"
  38. },
  39. {
  40. "id": 3,
  41. "moduleId": null,
  42. "imgName": "关于我们办公图片",
  43. "imgUrl": "https://tpl-c8d9f61-pic-tpl.websiteonline.cn/upload/news_03_dz52.png"
  44. },
  45. {
  46. "id": 4,
  47. "moduleId": null,
  48. "imgName": "关于我们云图片",
  49. "imgUrl": "https://tpl-c8d9f61-pic-tpl.websiteonline.cn/upload/news_03_dz52.png"
  50. },
  51. {
  52. "id": 5,
  53. "moduleId": null,
  54. "imgName": "关于我们电脑图片",
  55. "imgUrl": "https://tpl-c8d9f61-pic-tpl.websiteonline.cn/upload/news_03_dz52.png"
  56. }
  57. ]
  58. },
  59. {
  60. "id": 3,
  61. "mesaMenuId": 1,
  62. "moduleName": "schoolNews",
  63. "moduleNameCn": "学校新闻",
  64. "moduleImgs": []
  65. },
  66. {
  67. "id": 4,
  68. "mesaMenuId": 1,
  69. "moduleName": "businessCooperation",
  70. "moduleNameCn": "企业合作",
  71. "moduleImgs": []
  72. }
  73. ],
  74. "moduleImgs": null
  75. },
  76. {
  77. "id": 2,
  78. "menuName": "schoolProfile",
  79. "menuRoute": "/schoolProfile",
  80. "isShow": 0,
  81. "menuNameCn": "学校简介",
  82. "sort": 1,
  83. "mesaMenuModules": [],
  84. "moduleImgs": null
  85. },
  86. {
  87. "id": 3,
  88. "menuName": "newsCenter",
  89. "menuRoute": "/newsCenter",
  90. "isShow": 0,
  91. "menuNameCn": "新闻中心",
  92. "sort": 2,
  93. "mesaMenuModules": [],
  94. "moduleImgs": null
  95. },
  96. {
  97. "id": 4,
  98. "menuName": "teachingSubjects",
  99. "menuRoute": "/teachingSubjects",
  100. "isShow": 0,
  101. "menuNameCn": "教学科目",
  102. "sort": 3,
  103. "mesaMenuModules": [],
  104. "moduleImgs": null
  105. },
  106. {
  107. "id": 5,
  108. "menuName": "contactUs",
  109. "menuRoute": "/contactUs",
  110. "isShow": 0,
  111. "menuNameCn": "联系我们",
  112. "sort": 4,
  113. "mesaMenuModules": [],
  114. "moduleImgs": null
  115. }
  116. ]
  117. }

就这?

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读