上图是产品属性分类,应该关联的是属性参数表,前端需要的是,产品属性分类的id,name,以及属性参数表的id,name。
定义了一个数据传输对象DTO,有产品属性分类的id,name,属性参数则定义了一个list。
在mapper.xml文件中:
<resultMap id="ListWithAttrMap" type="com.tulingxueyuan.mall.modules.pms.model.dto.ProductAttributeCateDTO">
<id column="id" property="id"/>
<result column="name" property="name"/>
<collection property="productAttributeList" resultMap="com.tulingxueyuan.mall.modules.pms.mapper.PmsProductAttributeMapper.BaseResultMap"></collection>
</resultMap>
<select id="getListWithAttr"
resultMap="ListWithAttrMap">
SELECT
pac.id,
pac.`name`,
ppa.id attr_id,
ppa.`name` attr_name
FROM
`pms_product_attribute_category` pac
LEFT JOIN `pms_product_attribute` ppa ON pac.id = ppa.product_attribute_category_id
AND ppa.type = 1
</select>
sql完成的结果映射的resultMap是ListWithAttrMap,完成了属性分类的id和name的映射,然后用collection 完成dto对象中的productAttributeList的映射,但是属性参数查询返回结果是attr_id和attr_name,无法映射到属性参数表的id和name,视频采用了<collection property="productAttributeList" columnPrefix="attr_" resultMap="com.tulingxueyuan.mall.modules.pms.mapper.PmsProductAttributeMapper.BaseResultMap"></collection>
通过去掉attr_的前缀来完成映射,我采用了自己新定义一个resultMap来完成映射
<resultMap id="ListWithAttrMap" type="com.tulingxueyuan.mall.modules.pms.model.dto.ProductAttributeCateDTO">
<id column="id" property="id"/>
<result column="name" property="name"/>
<collection property="productAttributeList" resultMap="newMap"></collection>
</resultMap>
<resultMap id="newMap" type="com.tulingxueyuan.mall.modules.pms.model.PmsProductAttribute">
<id column="attr_id" property="id"/>
<result column="attr_name" property="name"></result>
</resultMap>
如图: