在Mybatis中,遇到需要一对多和多对多查询的对象封装,可以使用<collection>标签加载
而在Mybatis的前身ibatis中,不支持该标签,要进行类似的封装可以使用resultMap属性加载
在MyBatis中如下的配置
<!-- Result Map -->
<!-- goods resultmap -->
<resultMap id="goodsResultMap" type="com.qunar.scoresystem.bean.Goods">
<id property="goodsId" column="goods_id" />
<result property="goodsName" column="goods_name" />
<result property="goodsStorageNum" column="goods_storage_num" />
<result property="goodsScore" column="goods_score" />
<result property="goodsDescription" column="goods_description" />
<result property="goodsStatus" column="goods_status" />
<collection property="goodsImgList" resultMap="goodsImgResult" />
</resultMap>
<!-- goodsimage resultmap -->
<resultMap id="goodsImgResult" type="com.qunar.scoresystem.bean.GoodsImg">
<id property="imgId" column="img_id" />
<result property="goodsId" column="goods_id" />
<result property="imgDir" column="img_dir" />
<result property="imgSize" column="img_size" />
<result property="imgName" column="img_name" />
</resultMap>
ibatis不支持<collection>标签,可以用下列的方法,效果一致
用groupBy属性代替<id>标签
直接在result中使用resultMap属性引用其他resultMap,ibatis会自动封装
<!-- Result Map -->
<!-- goods resultmap -->
<resultMap id="goodsResultMap" type="com.qunar.scoresystem.bean.Goods" groupBy="goodsId">
<result property="goodsId" column="goods_id" />
<result property="goodsName" column="goods_name" />
<result property="goodsStorageNum" column="goods_storage_num" />
<result property="goodsScore" column="goods_score" />
<result property="goodsDescription" column="goods_description" />
<result property="goodsStatus" column="goods_status" />
<result property="goodsImgList" resultMap="goodsImgResult" />
</resultMap>
<!-- goodsimage resultmap -->
<resultMap id="goodsImgResult" type="com.qunar.scoresystem.bean.GoodsImg">
<result property="imgId" column="img_id" />
<result property="goodsId" column="goods_id" />
<result property="imgDir" column="img_dir" />
<result property="imgSize" column="img_size" />
<result property="imgName" column="img_name" />
</resultMap>
还有一种方法可以实现,但效率太低,不推荐使用
<!-- Result Map -->
<!-- goods resultmap -->
<resultMap id="goodsResultMap" type="com.qunar.scoresystem.bean.Goods">
<result property="goodsId" column="goods_id" />
<result property="goodsName" column="goods_name" />
<result property="goodsStorageNum" column="goods_storage_num" />
<result property="goodsScore" column="goods_score" />
<result property="goodsDescription" column="goods_description" />
<result property="goodsStatus" column="goods_status" />
<result property="goodsImgList" column="{goodsId = goods_id}" select="SelectGoodsImgList" />
</resultMap>
<!-- goodsimage select -->
<select id="SelectGoodsImgList" resultClass="com.qunar.scoresystem.bean.GoodsImg">
select * from XXX where id = #goodsId#
</select>