1.区别
resultType 适合单个对象,且属性与查询结果的列名一一对应,resultMap则相反。
2.用法示例
1. resultType示例
如果 ServeCategoryResDTO 类的属性与查询结果的列名一一对应,且没有复杂的嵌套关系,可以使用 resultType 来指定查询结果的类型。例如:
xml
<select id="selectServeCategory" resultType="com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO">
SELECT serve_type_id, serve_type_name, serve_type_icon, city_code, serve_type_sort_num
FROM serve_category
</select>
上面的例子中,查询语句的结果将会直接映射到 ServeCategoryResDTO 类的属性。
2. resultMap 示例
如果 ServeCategoryResDTO 类的属性与查询结果的列名不一致,或者存在复杂的嵌套关系,可以使用 resultMap 配置来定义映射关系。例如:
xml
<select id="findServeIconCategoryByRegionId" resultMap="ServeCategoryMap">
SELECT
type.id as serve_type_id,
type.name as serve_type_name,
type.serve_type_icon,
serve.city_code,
serve.id as serve_id,
item.id as serve_item_id,
item.name as serve_item_name,
item.serve_item_icon,
item.sort_num as serve_item_sort_num
FROM
serve
inner JOIN serve_item AS item ON item.id = serve.serve_item_id
inner JOIN serve_type AS type ON type.id = item.serve_type_id
WHERE
serve.region_id = #{regionId}
AND serve.sale_status = 2
ORDER BY
type.sort_num,
item.sort_num
</select>
<resultMap id="ServeCategoryMap" type="com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO">
<!--id映射主键字段-->
<id column="serve_type_id" property="serveTypeId"></id>
<!--result映射普通字段-->
<result column="serve_type_name" property="serveTypeName"></result>
<result column="serve_type_icon" property="serveTypeIcon"></result>
<result column="city_code" property="cityCode"></result>
<!--column 数据库中的字段名-->
<!--property 实体类中对应的属性(也就是你想返回类里的数据名) 该关键字可以省略... -->
<!--ofType 是javaType中的单个对象类型-->
<!-- serveResDTOListServeCategoryMap的一个List数组,也需要手动映射 -->
<collection property="serveResDTOList" ofType="com.jzo2o.foundations.model.dto.response.ServeSimpleResDTO">
<id column="serve_id" property="id"></id>
<result column="serve_item_id" property="serveItemId"></result>
<result column="serve_item_name" property="serveItemName"></result>
<result column="serve_item_icon" property="serveItemIcon"></result>
<result column="serve_item_sort_num" property="serveItemSortNum"></result>
</collection>
</resultMap>
2.1 返回数据图示
上面的例子中,通过 resultMap 配置定义了 ServeCategoryResDTO 类与查询结果之间的映射关系,并实现了对 serveResDTOList 属性的嵌套映射。