mybatis实现resultmap三层嵌套
-
在Myabtis中,直接写resultmap的三层级联,编译器会报错。为了解决这一问题,Mybatis框架提供了实现的方式,记录一下,方便有需要的小伙伴可以葫芦画瓢。
- resultMap结构
<resultMap id="findColList" type="com.study.domain.ColIndus"> <result property="industries_code" column="industries_code"/> <result property="industries" column="industries"/> <result property="daySale_1" column="daySale_1"/> <result property="monthSale_1" column="monthSale_1"/> <collection property="colSecs" resultMap="getSec_room"/> </resultMap> <resultMap id="getSec_room" type="com.study.domain.ColSec"> <result property="secondLevel_code" column="secondLevel_code"/> <result property="secondLevel" column="secondLevel"/> <result property="daySale_2" column="daySale_2"/> <result property="monthSale_2" column="monthSale_2"/> <collection property="colRooms" column="colRooms" ofType="com.study.domain.ColRoom"> <result property="saleRoom_code" column="saleRoom_code"/> <result property="saleRoom" column="saleRoom"/> <result property="daySale_3" column="daySale_3"/> <result property="monthSale_3" column="monthSale_3"/> </collection> </resultMap>
简单说明:第一个id为findColList的resultMap关联id为getSec_room的result
<collection property="colSecs" resultMap="getSec_room"/>
- 对应的实体类
public class ColIndus implements Serializable { private String industries_code; private String industries; private float daySale_1; private float monthSale_1; private List<ColSec> colSecs; //get&&set方法 } public class ColSec implements Serializable { private String secondLevel_code; private String secondLevel; private float daySale_2; private float monthSale_2; private List<ColRoom> colRooms; //get&&set方法 } public class ColRoom implements Serializable { private String saleRoom_code; private String saleRoom; private float daySale_3; private float monthSale_3; //get&&set方法 }
- 对应的sql
<select id="findAll" resultMap="findColList" parameterType="java.lang.String"> SELECT industries_code, industries, secondLevel_code, secondLevel, saleRoom_code, saleRoom, SUM( achive ) AS monthSale_3 FROM basechart WHERE actionTime <= #{endTime} AND actionTime >= #{MO} GROUP BY saleRoom_code </select>
- 在Dao层用List结果类型就可以了
List<ColIndus> findAll(@Param("MO") String MO, @Param("endTime")String endTime);
至此,一个高大上的三层级联就出来了