resultMap高级映射association,collection

本文详细介绍了MyBatis框架中的两种关联映射方式:association和collection。通过具体示例,展示了如何使用这两种映射处理一对一和一对多的关系,并提供了复用映射代码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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则是映射的一个集合列表,它处理的是一对多的关联关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值