在我的AppMapper.xml中,我有一个类似的查询:

<select id="getCompleteDetails" parameterType="Map" resultType="String">
  SELECT * FROM PersonProfile WHERE ID = #{id}
</select>


假设它将返回所有字符串的名称,地址,年龄,职业。
我用这个正确吗?

<select id="selectPerson" parameterType="int" resultType="String">


或者因为有多个值要接收,所以它应该类似于

<select id="selectPerson" parameterType="int" resultMap="PersonProfileObj">


如果我使用"resultMap=PersonProfileObj",我知道我需要像创建resultMap

<resultMap type="com.test.PersonProfileObj" id="PersonProfileObj">
 <result property="Name" column="Name">
<result property="Address" column="Address">
<result property="Age" column="Age">
<result property="Profession" column="Profession">
</resultMap>


//我的resultMap正确吗?

*我询问是否使用resultType = String或resultMap“ PersonProfileObj”

我的理解正确吗?

最佳答案

resultType指定给定的映射SQL语句返回的对象的类型(如果返回了多个对象,则为列表的元素)。如果指定resultType="String",则查询应恰好返回字符串类型的一个字段。

如果您需要返回多个字段,则可以:


创建一个对象并将这些字段映射到对象属性。
返回地图。在这种情况下,行中的每个字段都将是映射中的一个条目,其键等于列名,值等于字段值。


当您返回一个对象时,您可以使用默认映射来设置该对象的属性,这些属性与列名相对应,或者您可以指定resultMap,它可以更灵活地设置column -> property映射。

还要注意,在autoMapping上有一个resultMap属性,该属性将列隐式映射到具有相同名称的属性,因此,在您的示例中,假定列与属性具有相同的名称,则足以进行此映射:

<resultMap type="com.test.PersonProfileObj" id="PersonProfileObj" autoMapping="true">
</resultMap>


还请注意,通常希望为结果映射指定id,尤其是在集合/关联映射中使用查询或具有联接的情况下。

10-07 13:26