递归查询封装: 表结构 **TravelSetmea(1)→TravelGroup(n) TravelGroup(1)→TravelItem(n) 实体类 package com.hl.travel.entity; import java.io.Serializable; import java.util.List; /** * 旅行套餐 */ @Data public class Setmeal implements Serializable { private Integer id; private String name; private String code; private String helpCode; private String sex;//套餐适用性别:0不限 1男 2女 private String age;//套餐适用年龄 private Float price;//套餐价格 private String remark; private String attention; private String img;//套餐对应图片存储路径 private List<TravelGroup> travelGroups;//旅行套餐对应的报团分组,多对多关系 } Setmeal里面有List<TravelGroup> travelGroups @Data public class TravelGroup implements Serializable { private Integer id;//主键 private String code;//旅行团项目编号 private String name;//旅行团名称 private String helpCode;//旅行团项目缩写 private String sex;//适用性别 private String remark;//介绍 private String attention;//注意事项 private List<TravelItem> travelItems;//一个报团包含多个自由行 } Mapper层封装结果集 setmeal: <resultMap id="findByIdResultMap" type="com.hl.travel.entity.Setmeal"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="code" property="code"/> <result column="helpCode" property="helpCode"/> <result column="sex" property="sex"/> <result column="age" property="age"/> <result column="price" property="price"/> <result column="remark" property="remark"/> <result column="attention" property="attention"/> <result column="img" property="img"/> <collection property="travelGroups" column="id" select="com.hl.travel.dao.TravelGroupDao.findTravelGroupListById"> </collection> </resultMap> <select id="findDescById" resultMap="findByIdResultMap" parameterType="int"> select * from t_setmeal where id=#{id} </select> **注意这里 <collection property="travelGroups" column="id" select="com.hl.travel.dao.TravelGroupDao.findTravelGroupListById"> 去TravelGroupDao编写接口 /** * 根据跟团游Id查套餐游Id * @param id * @return */ List<TravelGroup> findTravelGroupListById(Integer id); sql: <!--根据套餐id查询自由行信息--> <select id="findTravelGroupListById" resultMap="findByIdResultMap" parameterType="int"> select * from t_travelgroup where id in (select travelgroup_id from t_setmeal_travelgroup where setmeal_id=#{id}) </select> 同理: TravelGroupDao.xml也对TravelItem进行封装即可 xml: <resultMap type="com.hl.travel.entity.TravelGroup" id="findByIdResultMap"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="code" property="code"/> <result column="helpCode" property="helpCode"/> <result column="sex" property="sex"/> <result column="remark" property="remark"/> <result column="attention" property="attention"/> <collection property="travelItems" column="id" select="com.hl.travel.dao.TravelItemDao.findTravelItemListById"> </collection> </resultMap> sql: <!--根据套餐id查询自由行信息--> <select id="findTravelGroupListById" resultMap="findByIdResultMap" parameterType="int"> select * from t_travelgroup where id in (select travelgroup_id from t_setmeal_travelgroup where setmeal_id=#{id}) </select> 继续封装: <collection property="travelItems" column="id" select="com.hl.travel.dao.TravelItemDao.findTravelItemListById"> /** * 根据套餐游Id查自由行id * @param id * @return */ List<TravelItem> findTravelItemListById(Integer id); sql: <!--根据跟团游id查询自由行信息--> <select id="findTravelItemListById" resultType="com.hl.travel.entity.TravelItem" parameterType="int"> select * from t_travelitem where id in (select travelitem_id from t_travelgroup_travelitem where travelgroup_id=#{id}) </select>