association是一对一,collection是一对多,association和collection在使用上没有区别,以下不作区分。
有两种配置方式:
使用select属性进行关联查询
宠物
<mapper namespace="com.tang.PetMapper">
<resultMap id="petResult" type="com.tang.Pet">
<id property="petId" column="pet_id" jdbcType="INTEGER"/>
<id property="petName" column="pet_name" jdbcType="VARCHAR"/>
<id property="userId" column="user_id" jdbcType="INTEGER"/>
<id property="userName" column="user_name" jdbcType="VARCHAR"/>
</resultMap>
<select id="selectByUser" parameterType="java.util.Map" resultMap="petResult">
select * from pet_t where user_id=#{uId} or user_name=#{uName}
</select>
</mapper>
用户
<mapper namespace="com.tang.UserMapper">
<resultMap id="userResult" type="com.tang.User">
<id property="userId" column="user_id" jdbcType="INTEGER"/>
<id property="userName" column="user_name" jdbcType="VARCHAR"/>
<collection property="pets" ofType="com.tang.Pet" select="com.tang.PetMapper.selectByUser" column="{uId=user_id,uName=user_name}"/>
</resultMap>
</mapper>
//select属性里的com.tang.PetMapper是指mapper的namespace。
使用resultMap属性进行关联查询
宠物
<mapper namespace="com.tang.PetMapper">
<resultMap id="petResult" type="com.tang.Pet">
<id property="petId" column="pet_id" jdbcType="INTEGER"/>
<id property="petName" column="pet_name" jdbcType="VARCHAR"/>
<id property="userId" column="user_id" jdbcType="INTEGER"/>
<id property="userName" column="user_name" jdbcType="VARCHAR"/>
</resultMap>
</mapper>
用户
<mapper namespace="com.tang.UserMapper">
<resultMap id="userResult" type="com.tang.User">
<id property="userId" column="user_id" jdbcType="INTEGER"/>
<id property="userName" column="user_name" jdbcType="VARCHAR"/>
<collection property="pets" resultMap="com.tang.PetMapper.petResult"/>
</resultMap>
</mapper>