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  阅读(360)  评论(0)    收藏  举报

导航