下面这是对应的所要返回的实体类,可以看到返回的格式类型,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>