问题:当涉及四个表的查询时,会产生大量的笛卡尔积导致内存溢出。
解决办法 :可以使用嵌套查询将多表的联合查询拆分为单个表的查询,使用resultmap中的association(适合一对一) 或 collection(一对多) 来实现封装。
association(适合一对一) 或 collection(一对多)的理解可以参考这个 , 思想容易懂
http://t.csdnimg.cn/itH1L http://t.csdnimg.cn/itH1L
http://t.csdnimg.cn/itH1L

 <resultMap type="NodeVo" id="NodeVoResult"><result property="id"    column="id"    /><result property="nodeName"    column="node_name"    /><result property="address"    column="address"    /><result property="businessType"    column="business_type"    /><result property="regionId"    column="region_id"    /><result property="partnerId"    column="partner_id"    /><result property="createTime"    column="create_time"    /><result property="updateTime"    column="update_time"    /><result property="createBy"    column="create_by"    /><result property="updateBy"    column="update_by"    /><result property="remark"    column="remark"    /><result property="vmCount"    column="vm_count"    />
<!--    property 对应实体类的字段  javatype对应这个字段的类型 column对应查询对应的条件 select 对应查询的方法,全路径    -->
<!--        为了防止多表联查产生大量笛卡尔积导致内存溢出,使用嵌套查询--><association property="region" javaType="Region" column="region_id" select="com.dkd.manage.mapper.RegionMapper.selectRegionById"/><association property="partner" javaType="Partner" column="partner_id" select="com.dkd.manage.mapper.PartnerMapper.selectPartnerById"/></resultMap>    <select id="selectNodeVoList" resultMap="NodeVoResult">SELECTn.id,n.node_name,n.address,n.business_type,n.region_id,n.partner_id,n.create_time,n.update_time,n.create_by,n.update_by,n.remark,COUNT(v.id) AS vm_countFROMtb_node nLEFT JOINtb_vending_machine v ON n.id = v.node_id<where>
--              字段名不唯一的时候一定指定是哪个表的字段<if test="nodeName != null  and nodeName != ''"> and n.node_name like concat('%', #{nodeName}, '%')</if><if test="regionId != null "> and n.region_id = #{regionId}</if><if test="partnerId != null "> and n.partner_id = #{partnerId}</if></where>GROUP BYn.id</select>