在 MyBatis 的 XML 映射文件中,可以使用 和<collection>
標簽來處理關聯查詢。這兩個標簽用于處理一對一(association)和一對多(collection)的關系。
假設有兩個實體類:User 和 UserDetails,一個用戶對應一個用戶詳情。
首先,在 User 的映射文件中定義一個 resultMap,使用
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<association property="userDetails" javaType="UserDetails" resultMap="userDetailsResultMap"/>
</resultMap><resultMap id="userDetailsResultMap" type="UserDetails">
<id property="id" column="user_details_id"/>
<result property="address" column="address"/>
<result property="email" column="email"/>
<result property="phone" column="phone"/>
</resultMap>
然后,在 User 的映射文件中定義一個 SQL 查詢語句,使用 JOIN 語句來查詢 User 和 UserDetails 的數據:
SELECT u.*, ud.*
FROM user u
JOIN user_details ud ON u.user_id = ud.user_id
WHERE u.user_id = #{userId}
</select>
假設有兩個實體類:Author 和 Book,一個作者可以有多本書。
首先,在 Author 的映射文件中定義一個 resultMap,使用
<id property="id" column="author_id"/>
<result property="name" column="author_name"/>
<collection property="books" ofType="Book" resultMap="bookResultMap"/>
</resultMap><resultMap id="bookResultMap" type="Book">
<id property="id" column="book_id"/>
<result property="title" column="book_title"/>
<result property="publicationDate" column="publication_date"/>
</resultMap>
然后,在 Author 的映射文件中定義一個 SQL 查詢語句,使用 JOIN 語句來查詢 Author 和 Book 的數據:
SELECT a.*, b.*
FROM author a
LEFT JOIN book b ON a.author_id = b.author_id
WHERE a.author_id = #{authorId}
</select>
這樣,MyBatis 就會自動處理關聯查詢,并將查詢結果映射到相應的實體類中。