Mybatis操作三张表:一对多对多:

文章展示了在Mybatis中如何处理一对多和多对多关系的实体类设计及Mapper配置。实体类包括SchemeAddition,Mechanism和IndicatorData,它们分别对应不同的数据库表。MapperXML文件中定义了ResultMap来映射查询结果,包括集合属性mechdata和catordata,以及各自对应的子类对象。查询SQL从三个表中选取关联数据。
摘要由CSDN通过智能技术生成

Mybatis操作 三张表:一对多对多:

1、domain类:

package com.zhecre.jx.business.model.cases.request;

import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * 描述:新增请求数据
 *
 * @CreateTime: 2022/11/24 16:29:56
 * @Version: 1.0
 */
@Data
public class SchemeAddition {

    private String type;  //类型:新增时默认 1:当量指标 2:质量指标

    private String status; //方案状态:方案状态(1:未提交|2:已提交|3:已驳回|4:已审核)

    private String onoff;  //状态(0:停用  |  1:启用)


    private String casename;   //方案名称

    private String caseid;   //方案编号、方案ID

    private String casetype;   //翻案类型

    private String remark;    //方案说明 备注

    private Date createdate;//方案创建时间

    private Date modifydate;//修改方案时间

    private String isdelete; //删除方案:不要真删除 Y|N

    //PAS_CAS_HOSPITAL 表
    private List<Mechanism> mechdata;

    //PAS_CAS_INDEX 表
    private List<IndicatorData> catordata;
}

package com.zhecre.jx.business.model.cases.request;

import lombok.Data;

/**
 * 描述: PAS_CAS_HOSPITAL 表
 *
 *
 */
@Data
public class Mechanism {

    private String  hosname;//机构

    private String orgid;//机构id

    private String caseid;   //方案编号、方案ID
}

package com.zhecre.jx.business.model.cases.request;

import lombok.Data;

/**
 * 描述:PAS_CAS_INDEX 表
 *
 * @CreateTime: 2022/11/24 16:31:02
 * @Version: 1.0
 */
@Data
public class IndicatorData {

    private String indexid;    //指标ID

    private String indexname;   //指标名称

    private String unit; //计量 值单位

    private Double coef; //标化当量 权重

    private Double discount;     //折算当量

    private String caseid;   //方案编号、方案ID
}

2、controller 层:

 @GetMapping("/getecho/{caseid}")
    public SchemeAddition getCompensation(@PathVariable("caseid")String caseid){
        return  pasCaseService.getCompensation(caseid);
    }

3、service层接口方法:

SchemeAddition getCompensation(String caseid);

4、service层接口实现方法:

@Override
    public SchemeAddition getCompensation(String caseid) {
        return  pasCaseMapper.getCompensation(caseid);
    }

5、Mapper接口:

SchemeAddition getCompensation(String caseid);

6、Mapper XML文件:

注意:

<!-- property: 指的是集合属性的值,对应类中的属性名 ofType:指的是集合中元素的类型 -->

<!-- property: 指的是属性名称, javaType:指的是属性的类型 -->

即:JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型
<resultMap id="getCompensationMapper" type="com.zhecre.jx.business.model.cases.request.SchemeAddition">

        <id column="caseid" property="caseid"/>
        <result column="casename" property="casename"/>
        <result column="casetype" property="casetype"/>
        <result column="remark" property="remark"/>


        <collection property="mechdata" ofType="com.zhecre.jx.business.model.cases.request.Mechanism">
            <id column="caseid" property="caseid"/>
             <result column="orgid" property="orgid"/>
            <result column="hosname" property="hosname"/>
        </collection>

        <collection property="catordata" ofType="com.zhecre.jx.business.model.cases.request.IndicatorData">
            <id column="caseid" property="caseid"/>
            <result column="indexid" property="indexid"/>
            <result column="unit" property="unit"/>
            <result column="coef" property="coef"/>
            <result column="discount" property="discount"/>
            <result column="caseid" property="caseid"/>
        </collection>

    </resultMap>


    <select id="getCompensation" resultType="com.zhecre.jx.business.model.cases.request.SchemeAddition" resultMap="getCompensationMapper">
        SELECT c.casename,c.caseid,c.casetype,c.remark,
               x.indexid,x.indexname,x.caseid,x.unit,x.coef,x.discount,
               h.caseid,h.hosname,h.orgid
        FROM PAS_CASE c,PAS_CASE_INDEX x,PAS_CASE_HOSPITAL h
             WHERE c.CASEID=x.CASEID
                   and h.CASEID=c.CASEID
                   and c.CASEID=#{caseid}
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北执南念

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值