在最近的springboot+mybatis-plus项目中出现了一对多的关联查询,这里记录一下,方便以后的学习
1.数据库表
1.1主表
1.2从表
我们知道一个主表里面可能包含多个多个从表,这就相当于主表是一个老师表,从表是一个学生表,一个老师有多个学生。
2.项目开始
我们需要做的是查找出主表以及相关的从表,也就是一个老师信息以及相关的学生信息。
2.1 controller层
//查找模板
@ApiOperation("预览接待标准模板")
@GetMapping("/select/{id}")
public R<PreviewVO> getInfo(@PathVariable("id") String id)
{
return R.ok(templateService.selectTemplateById(id));
}
2.2 service接口层
//详情展示
PreviewVO selectTemplateById(String id);
我们看到这里涉及出参,我们来看一下我们的出参PreviewVO
2.3 出参PreviewVO ,需要展示给前端的数据,关联了从表的输出参数List
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel(value = "预览标准模板VO")
public class PreviewVO {
/**
* id
*/
@ApiModelProperty(value = "id")
private String id;
/**
* 模板名称
*/
@ApiModelProperty(value = "模板名称")
private String name;
/**
* 适用客户等级
*/
@ApiModelProperty(value = "适用客户等级",allowableValues = "1级,2级,3级,4级,5级")
private String level;
/**
* 接待流程
*/
@ApiModelProperty(value = "接待流程")
private String receptionProcess;
/**
* 备注
*/
@ApiModelProperty(value = "备注")
private String remark;
/**
* 是否启用,0禁用,1启用
*/
@ApiModelProperty(value = "是否启用,0禁用,1启用",allowableValues = "0,1")
private Integer enableStatus;
@ApiModelProperty(value = "接待费用VO")
private List<FeeReVO> feeReVOS;
}
2.4 FeeReVO
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel(value = "接待费用VO")
public class FeeReVO {
/**
* 费用名称
*/
@ApiModelProperty(value = "费用名称")
private String feeName;
/**
* 费用-小
*/
@ApiModelProperty(value = "费用-小")
private BigDecimal feeMin;
/**
* 费用-大
*/
@ApiModelProperty(value = "费用-大")
private BigDecimal feeMax;
/**
* 单位,0元/人/间,1元/人/顿,2元/桌,3元/人,4元/次
*/
@ApiModelProperty(value = "单位,0元/人/间,1元/人/顿,2元/桌,3元/人,4元/次")
private String measures;
}
2.5 serviceImpl层
//详情展示
@Override
public PreviewVO selectTemplateById(String id) {
return receptionTemplateMapper.selectTemplateById(id);
}
2.6 mapper接口
//详情
PreviewVO selectTemplateById(@Param("id") String id);
2.7 mapper.xml
<!-- 详情查询 -->
<select id="selectTemplateById" parameterType="String" resultMap="TemplateFee">
select t.id id,t.name name,t.level `level` ,t.reception_process reception_process ,t.remark remark , t.enable_status enable_status ,
f.fee_name fee_name,f.fee_min fee_min,f.fee_max fee_max,f.measures measures
from ciz_data.property_reception_template t left join ciz_data.property_reception_template_fee f
on
f.template_id = t.id
where f.template_id = #{id}
</select>
<resultMap id="TemplateFee" type="com.ai.property.reception.domain.vo.PreviewVO">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="level" column="level"/>
<result property="receptionProcess" column="reception_process"/>
<result property="remark" column="remark"/>
<result property="enableStatus" column="enable_status"/>
<collection property="feeReVOS" ofType="com.ai.property.reception.domain.vo.FeeReVO">
<result property="feeName" column="fee_name"/>
<result property="feeMin" column="fee_min"/>
<result property="feeMax" column="fee_max"/>
<result property="measures" column="measures"/>
</collection>
</resultMap>
3. 测试
利用swagger进行相关的测试
成功查询出结果,实现了一对多的查询!