resultmap collection的使用
resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。
如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
<resultMap type="BizProContract" id="ProContractResult">
<result property="contractId" column="CONTRACT_ID" />
<result property="contractNo" column="CONTRACT_NO" />
<result property="proId" column="PRO_ID" />
<result property="proName" column="PRO_NAME" />
<result property="clueId" column="CLUE_ID" />
<result property="userId" column="user_id" />
<collection property="industryList" select="selectIndustry" column="PRO_ID">
<result column="dict_label" property="industry"/>
</collection>
</resultMap>
<select id="selectIndustry" resultType="java.lang.String">
select distinct sdd.dict_label from biz_invest_pro b
left join biz_invest_industry bii on bii.PRO_ID=b.PRO_ID
left join sys_dict_data sdd on sdd.dict_type='industry_type'
and bii.INDUSTRY=sdd.dict_value where b.pro_id = #{proId} and sdd.status='0'
</select>
<select id="getParkPlanningContract" resultMap="ProContractResult">
select distinct a.CONTRACT_ID ,a.CONTRACT_NAME ,b.PRO_ID
from biz_pro_contract a
left join biz_invest_pro b on a.PRO_ID = b.PRO_ID
left join biz_clue c on b.CLUE_ID = c.CLUE_ID
where c.STATUS = '4' and DATE_FORMAT(a.CONTRACT_TIME , '%Y') = #{year}
and a.DISUSE = '0'
<if test="userIds != null and userIds.size()!=0">
and a.CREATE_BY in
<foreach item="item" index="index" collection="userIds" open="(" separator="," close=")">
#{item}
</foreach>
</if>
ORDER BY a.CREATE_TIME desc
</select>
package com.kdgc.bi.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.kdgc.common.annotation.Excel;
import com.kdgc.common.core.domain.BaseEntity;
import com.kdgc.system.domain.SysFileInfo;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 项目合同对象 biz_pro_contract
*/
public class BizProContract extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 合同主键 */
private Long contractId;
private List<String> industryList; //实体中封装list
public void setContractId(Long contractId)
{
this.contractId = contractId;
}
public Long getContractId()
{
return contractId;
}
public List<String> getIndustryList() {
return industryList;
}
public void setIndustryList(List<String> industryList) {
this.industryList = industryList;
}
}
如果实体中封装对象
private User user;
<resultMap type="order" id="orderUserResultMap">
<id property="id" column="id" />
<result property="userId" column="user_id" />
<result property="number" column="number" />
<result property="createtime" column="createtime" />
<result property="note" column="note" />
<!-- association :配置一对一属性 -->
<!-- property:order里面的User属性名 -->
<!-- javaType:属性类型 -->
<association property="user" javaType="user">
<!-- id:声明主键,表示user_id是关联查询对象的唯一标识-->
<id property="id" column="user_id" />
<result property="username" column="username" />
<result property="address" column="address" />
</association>
</resultMap>
<!-- 一对一关联,查询订单,订单内部包含用户属性 -->
<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
SELECT
o.id,
o.user_id,
o.number,
o.createtime,
o.note,
u.username,
u.address
FROM
`order` o
LEFT JOIN `user` u ON o.user_id = u.id
</select>
posted on 2022-01-18 11:45 ALWAYS☆REMIND 阅读(365) 评论(0) 收藏 举报
浙公网安备 33010602011771号