mybatis的collection屬性映射講解

小樊
220
2024-07-19 21:27:43

在MyBatis中,我們可以使用collection屬性來(lái)映射一個(gè)集合類(lèi)型的屬性。這個(gè)屬性通常用于映射一對(duì)多的關(guān)系,即一個(gè)對(duì)象中包含多個(gè)子對(duì)象的集合。

在進(jìn)行集合屬性映射時(shí),我們需要使用標(biāo)簽來(lái)定義集合屬性的映射,示例如下:

<resultMap id="userMap" type="User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="age" column="age"/>
    <collection property="orders" ofType="Order">
        <id property="id" column="order_id"/>
        <result property="orderName" column="order_name"/>
        <result property="price" column="price"/>
    </collection>
</resultMap>

在上面的示例中,我們定義了一個(gè)resultMap用于映射User對(duì)象,其中包含一個(gè)集合屬性orders,用于映射用戶(hù)的訂單信息。在標(biāo)簽中,我們需要指定property屬性來(lái)指定集合屬性的名稱(chēng),ofType屬性來(lái)指定集合中元素的類(lèi)型。然后在標(biāo)簽中定義集合元素的映射關(guān)系。

在使用集合屬性進(jìn)行查詢(xún)時(shí),我們可以通過(guò)嵌套select語(yǔ)句來(lái)查詢(xún)集合屬性的值,示例如下:

<select id="getUserById" resultMap="userMap" parameterType="int">
    SELECT u.id, u.username, u.age, o.id as order_id, o.order_name, o.price
    FROM users u
    LEFT JOIN orders o ON u.id = o.user_id
    WHERE u.id = #{id}
</select>

在上面的示例中,我們通過(guò)LEFT JOIN查詢(xún)用戶(hù)信息和訂單信息,并將查詢(xún)結(jié)果映射到User對(duì)象的集合屬性orders中。

通過(guò)使用collection屬性,我們可以方便地映射一對(duì)多的關(guān)系,并進(jìn)行復(fù)雜的查詢(xún)操作。

0