# Mybatis中resultMap的Colum和property怎么用
## 一、resultMap基礎概念
### 1.1 什么是resultMap
resultMap是MyBatis框架中用于映射數據庫查詢結果到Java對象的核心配置元素。它解決了數據庫字段名與Java對象屬性名不一致時的映射問題,是MyBatis實現ORM(對象關系映射)的關鍵組件。
### 1.2 resultMap與resultType的區別
- **resultType**:直接指定返回類型,要求數據庫列名與Java屬性名完全一致(或開啟自動駝峰轉換)
- **resultMap**:通過顯式配置建立列與屬性的映射關系,支持復雜映射場景
```xml
<!-- resultType示例 -->
<select id="selectUser" resultType="com.example.User">
SELECT id, user_name, age FROM user
</select>
<!-- resultMap示例 -->
<resultMap id="userResultMap" type="com.example.User">
<!-- 映射配置 -->
</resultMap>
<resultMap id="basicMap" type="User">
<id property="id" column="user_id"/>
<result property="username" column="user_name"/>
<result property="age" column="user_age"/>
</resultMap>
當數據庫字段與Java屬性命名風格不同時:
<resultMap id="userMap" type="User">
<!-- 主鍵字段 -->
<id property="id" column="user_id"/>
<!-- 普通字段 -->
<result property="userName" column="user_name"/>
<result property="createdAt" column="create_time"/>
</resultMap>
處理對象間的1:1關系:
<resultMap id="orderWithUserMap" type="Order">
<id property="id" column="order_id"/>
<!-- 關聯用戶對象 -->
<association property="user" javaType="User">
<id property="id" column="user_id"/>
<result property="username" column="user_name"/>
</association>
</resultMap>
處理集合類型屬性:
<resultMap id="userWithOrdersMap" type="User">
<id property="id" column="id"/>
<!-- 訂單集合 -->
<collection property="orders" ofType="Order">
<id property="id" column="order_id"/>
<result property="amount" column="order_amount"/>
</collection>
</resultMap>
<!-- 開啟autoMapping后,未明確配置的字段會自動映射 -->
<resultMap id="autoMap" type="User" autoMapping="true">
<!-- 只手動映射命名不一致的字段 -->
<result property="email" column="user_email"/>
</resultMap>
復用已定義的resultMap:
<resultMap id="baseUserMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
</resultMap>
<resultMap id="extendedUserMap" extends="baseUserMap">
<result property="email" column="email"/>
</resultMap>
通過select實現延遲加載:
<resultMap id="orderWithUserMap" type="Order">
<association property="user" column="user_id"
select="selectUserById"/>
</resultMap>
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<resultMap id="userOrderDetailMap" type="User">
<id property="userId" column="u_id"/>
<result property="userName" column="u_name"/>
<collection property="orders" ofType="Order">
<id property="orderId" column="o_id"/>
<result property="orderAmount" column="o_amount"/>
<collection property="items" ofType="OrderItem">
<result property="productName" column="oi_product"/>
<result property="quantity" column="oi_quantity"/>
</collection>
</collection>
</resultMap>
當列名需要動態確定時:
<resultMap id="dynamicColumnMap" type="User">
<id property="id" column="id"/>
<result property="name" column="${dynamicColumn}"/>
</resultMap>
resultMap的column和property屬性是MyBatis實現靈活映射的基礎: - column始終代表數據庫側的列名 - property始終代表Java對象的屬性名 - 合理使用可以處理各種復雜的映射場景 - 結合自動映射和繼承機制能顯著減少配置工作量
掌握resultMap的配置技巧,能夠有效解決實際開發中90%以上的ORM映射問題,是MyBatis高效使用的關鍵技能。
提示:在實際開發中,建議結合MyBatis的日志功能(開啟debug級別)來調試映射問題,可以清晰看到屬性賦值的過程和結果。 “`
這篇文章共計約2200字,全面介紹了MyBatis中resultMap的column和property屬性的使用方法,包含基礎概念、詳細配置示例、高級技巧和實際問題解決方案,采用Markdown格式編寫,層次清晰,適合作為技術文檔參考。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。