首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

iBATIS 2.x 一對多映射配置詳解(resultMap + select 嵌套)

     編輯:Java 綜合教學

iBATIS 2.x 一對多映射配置詳解(resultMap + select 嵌套)

iBATIS 通過 resultMap 的 select 屬性實現一對多關聯查詢,核心思路是:主查詢返回主對象,關聯查詢通過外鍵獲取集合屬性。

場景:班級 - 學生(一對多)

1. 班級 ResultMap(含關聯查詢)

<resultMap class="ClassBean" id="classBean_result">
    <result column="db_id" property="id" />
    <result column="db_name" property="name" />
    <!-- 關鍵:studentList 通過嵌套 select 填充 -->
    <result column="db_id" property="studentList" select="testDao.selectStudent"/>
</resultMap>

select="namespace.selectId" 指向學生查詢語句。

2. 學生 ResultMap

<resultMap class="StudentBean" id="studentBean_result">
    <result column="id" property="id"/>
    <result column="db_name" property="name"/>
</resultMap>

3. 學生查詢語句(參數為班級 ID)

<select id="selectStudent" parameterClass="java.lang.String" resultMap="studentBean_result">
    select * from table_student where class_id = #value#
</select>

4. 班級主查詢

<select id="selectClass" parameterClass="java.util.Map" resultMap="classBean_result">
    select * from table_class where 1=1
</select>

優缺點分析

  • ✅ 映射清晰,易維護,支持延時加載
  • ⚠️ N+1 問題:每個班級觸發一次學生查詢,數據量大時性能差
  • 💡 優化:改用 resultMap 關聯映射(<collection>)或手寫 JOIN 查詢

適用場景: 數據量較小、關聯層次簡單、開發效率優先的項目。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved