Mabatis关联查询中一对多关系的sql

下面这是对应的所要返回的实体类,可以看到返回的格式类型,sql返回的结果是一个集合

@Data
public class BusinessRuleDDTO implements Serializable {
    /**
     * 主键ID
     */
    private Long ruleDId;

    /**
     * 规则主表关联ID
     */
    private Long ruleId;
   /**
     * 规则状态
     */
    private Integer status;

    /**
     * 参数1
     */
    private String parameter1;
    /**
     * 规则明细detail
     */
    private List<BusinessRuleDetailDTO> ruleDetailDTOS;

}
<resultMap  type属性是接收实体类对象路径,id属性的值和sql中resultMap的要相同,就是通过该id将查出的值映射到实体类中>

resultMap标签里面还有collection标签,该标签是一个集合,ofType属性是装该集合的实体类,result标签里面是查询的sql中取的别名,取别名是因为和主表字段名重复,值会被覆盖,property属性里面还是原来值,不会被覆盖了
<resultMap type="com.ouyeel.soc.bs.mc.api.dto.rule.BusinessRuleDDTO" id="BusinessRuleDDTOResultMap">
            <result column="ID" jdbcType="BIGINT" property="ruleDId" />
            <result column="BU_CODE" jdbcType="VARCHAR" property="buCode" />
            <result column="STATUS" jdbcType="INTEGER" property="status" />
            <result column="PARAMETER1" jdbcType="VARCHAR" property="parameter1" />
        <collection property="ruleDetailDTOS" column="rd_ID" ofType="com.ouyeel.soc.bs.mc.api.dto.rule.BusinessRuleDetailDTO">
            <id column="rd_ID" property="id"></id>
            <result column="rd_STATUS" property="status" />
            <result column="rd_RULE_D_ID" property="ruleDId" />
            <result column="rd_PARAMETER1" 
        </collection>
    </resultMap>
这里贴出部分sql,rd表中为什么要取别名,那是因为rd表和d表字段是重复的,如果不取别名,d表和rd表相同的字段,d表值会被映射到rd表中
<select id="getBusinessRuleDAndDetailDTO" resultMap="BusinessRuleDDTOResultMap">
        select
            d.*,
            rd.ID AS rd_ID,
            rd.STATUS AS rd_STATUS,
            rd.RULE_D_ID AS rd_RULE_D_ID,
            rd.PARAMETER1 AS rd_PARAMETER1
        from
            T_BSMC_BUSINESS_RULE_D d
        left join T_BSMC_BUSINESS_RULE_DETAIL rd on rd.RULE_D_ID = d.ID
        <where>
        <if test="ruleId !=null">
            d.RULE_ID = #{ruleId}
        </if>
        <if test="command.parameter1 !=null and command.parameter1 !=''">
            and d.PARAMETER1 = #{command.parameter1}
        </if>
        <if test="command.parameter2 !=null and command.parameter2 !=''">
            and d.PARAMETER2 = #{command.parameter2}
        </if>
        <if test="command.parameter3 !=null and command.parameter3 !=''">
            and d.PARAMETER3 = #{command.parameter3}
        </if>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值