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) 收藏 举报