Springboot+Mybatis-Plus实现一对多的查询

在最近的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进行相关的测试
在这里插入图片描述
成功查询出结果,实现了一对多的查询!

猜你喜欢

转载自blog.csdn.net/qq_45780016/article/details/125848961
今日推荐