association与collection
association:映射到JavaBean的某个复杂类型属性,比如JavaBean类。
<!-- 根据角色id获取用户列表 -->
<select id="getUserListByRoleId" parameterType="Integer"
resultMap="userRoleResult">
select u.*,r.id as r_id,r.roleCode,r.roleName from smbms_user
u,smbms_role r
where u.userRole = #{userRole} and u.userRole=r.id
</select>
<resultMap type="User" id="userRoleResult">
<id property="id" column="id" />
<result property="userCode" column="userCode" />
<result property="userName" column="userName" />
<result property="userRole" column="userRole" />
<association property="role" javaType="Role">
<id property="id" column="r_id" />
<result property="roleCode" column="roleCode" />
<result property="roleName" column="roleName" />
</association>
</resultMap>
为了方便复用,可以把association映射代码抽取出来放在一个resultMap中,如何设置association的resultMap属性来引用外部的“addressResult”
<!-- association外部引用resultMap -->
<resultMap type="User" id="userRoleResult">
<id property="id" column="id" />
<result property="userCode" column="userCode" />
<result property="userName" column="userName" />
<result property="userRole" column="userRole" />
<association property="role" javaType="Role" resultMap="roleResult" />
</resultMap>
<resultMap id="roleResult" type="Role">
<id property="id" column="r_id" />
<result property="roleCode" column="roleCode" />
<result property="roleName" column="roleName" />
</resultMap>
collection元素跟association元素的作用差不多,只不过这个属性是一个集合列表。
<!-- 根据用户id获取用户信息及地址列表 -->
<select id="getAddressListByUserId" resultMap="userAddressResult" parameterType="Integer">
select u.*,a.id as a_id,a.contact,a.addressDesc,a.postCode,a.tel
from smbms_user u,smbms_address a
where u.id=a.userId and u.id=#{id}
</select>
<resultMap type="User" id="userAddressResult">
<id property="id" column="id" />
<result property="userCode" column="userCode" />
<result property="userName" column="userName" />
<collection property="addressList" ofType="Address">
<id property="id" column="a_id" />
<result property="postCode" column="postCode" />
<result property="tel" column="tel" />
<result property="contact" column="contact" />
<result property="addressDesc" column="addressDesc" />
</collection>
</resultMap>
collection跟association引用外部映射文件差不多。
<!-- collection外部引用resultMap -->
<resultMap type="User" id="userAddressResult">
<id property="id" column="id" />
<result property="userCode" column="userCode" />
<result property="userName" column="userName" />
<collection property="addressList" ofType="Address" resultMap="addressResult"/>
</resultMap>
<resultMap type="Address" id="addressResult">
<id property="id" column="a_id" />
<result property="postCode" column="postCode" />
<result property="tel" column="tel" />
<result property="contact" column="contact" />
<result property="addressDesc" column="addressDesc" />
</resultMap>
最后association和collection的区别是:
association映射的是一个JavaBean类,它仅处理一对一的关联关系。
collection则是映射的一个集合列表,它处理的是一对多的关联关系。