亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis ResultMap 的基本用法示例詳解

 更新時間:2025年06月11日 12:04:55   作者:卡文迪許的引力常量  
在MyBatis 中,resultMap 用于定義數(shù)據庫查詢結果到Java對象屬性的映射關系,本文給大家介紹MyBatis ResultMap的基本用法,感興趣的朋友一起看看吧

MyBatis 中的 resultMap

在 MyBatis 中,resultMap 用于 定義數(shù)據庫查詢結果到 Java 對象屬性的映射關系。適合處理 復雜的映射關系,如 嵌套對象、集合、一對多或多對一的關系,以及 字段和屬性名不一致 的情況。

resultMap 明確指定數(shù)據庫查詢結果(字段)如何映射到 Java 對象的屬性。通常,resultMap 被用于 SELECT 查詢時的 結果映射,但也可以用于 插入更新 等操作。

1. resultMap 的基本語法

resultMap 通常寫在 MyBatis 的 Mapper.xml 文件中,通過 <resultMap> 標簽定義。以下是 resultMap 的基本語法結構:

<resultMap id="resultMapId" type="Java類類型">
    <result property="屬性名" column="列名"/>
</resultMap>
  • idresultMap 的唯一標識,可以在 select、insert 等語句中引用。
  • type:指定查詢結果映射的 Java 類型(通常是一個 POJO 類)。
  • property:Java 對象的屬性名。
  • column:數(shù)據庫表的列名。

2. 簡單的 resultMap 示例

假設數(shù)據庫表 t_user 和實體類 User 如下:

t_user 表:

CREATE TABLE t_user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    user_email VARCHAR(100),
    user_age INT
);

User 實體類:

public class User {
    private Integer id;
    private String username;
    private String email;
    private Integer age;
    // Getters and Setters
}

resultMap 示例:

<mapper namespace="com.example.mapper.UserMapper">
    <resultMap id="userResultMap" type="User">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="email" column="user_email"/>
        <result property="age" column="user_age"/>
    </resultMap>
    <select id="selectUserById" resultMap="userResultMap">
        SELECT id, username, user_email, user_age
        FROM t_user
        WHERE id = #{id}
    </select>
</mapper>
  • <resultMap> 標簽用于定義數(shù)據庫列和 Java 屬性之間的映射。
  • <result> 標簽用于指定字段和屬性的具體映射關系(**<resultMap>**中用于具體描述映射關系的子標簽)。column 是數(shù)據庫列名,property 是 Java 實體類的屬性。

在這個例子中,當執(zhí)行查詢時,MyBatis 會將 t_user 表中的字段映射到 User 類的屬性上。

關于上面的例子,大家可能會有這樣的問題,為什么屬性名和字段名一樣也要寫出來,這種情況MyBatis不是會自動映射嗎?這其實是出于一種 清晰和規(guī)范化的考慮,使用resultMap 的時候盡量把所有屬性和字段的映射關系都寫出來。詳細可以參考:
Mybatis系列第8篇:自動映射,使用需謹慎!
【MyBatis自動映射】為什么即使字段名和屬性名一致,使用resultMap時也應該顯式列出所有映射?

3. 常用的 resultMap 功能

(1) 處理字段名和屬性名不一致

有時數(shù)據庫的列名與 Java 類的屬性名不一致,resultMap 可以幫助處理這種映射。使用 column 來指定數(shù)據庫中的列名,property 來指定 Java 類的屬性名。

例如:

<resultMap id="userResultMap" type="User">
    <result property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <result property="email" column="user_email"/>
</resultMap>

(2) 一對一映射(<association>

如果查詢的結果需要映射到一個嵌套的對象(如一對一關系),可以使用 <association> 標簽。

示例:一對一關系(用戶和地址)

假設 t_user 表中有 address_id 字段,表示該用戶的地址 ID,而地址信息存儲在 t_address 表中。我們需要將查詢結果映射為用戶和地址的組合。

t_address 表:

CREATE TABLE t_address (
    id INT PRIMARY KEY AUTO_INCREMENT,
    street VARCHAR(100),
    city VARCHAR(50)
);

Address 實體類:

public class Address {
    private Integer id;
    private String street;
    private String city;
    // Getters and Setters
}

User 實體類(修改版):

public class User {
    private Integer id;
    private String username;
    private Address address;  // 關聯(lián)一個 Address 對象
    // Getters and Setters
}

resultMap 示例:

<mapper namespace="com.example.mapper.UserMapper">
    <resultMap id="userResultMap" type="User">
        <result property="id" column="user_id"/>
        <result property="username" column="user_name"/>
        <association property="address" column="address_id" javaType="Address"
                      select="selectAddressById"/>
    </resultMap>
    <select id="selectUserById" resultMap="userResultMap">
        SELECT user_id, user_name, address_id
        FROM t_user
        WHERE user_id = #{id}
    </select>
    <select id="selectAddressById" resultType="Address">
        SELECT id, street, city
        FROM t_address
        WHERE id = #{addressId}
    </select>
</mapper>
  • 使用 <association> 標簽實現(xiàn) 一對一 映射,property 是 Java 對象中的屬性(address),column 是數(shù)據庫中關聯(lián)的列(address_id)。
  • javaType 是關聯(lián)對象的類型(Address),select 屬性指定了通過 address_id 查詢地址完整信息的 SQL 查詢。

原本只能查出address_id,現(xiàn)在在userResultMap中定義把查出來的address_id映射到address,但是一個Integer類的id怎么賦值給Address類?所以需要在associationselect屬性中指定根據這個id去對應表中查詢出對應實體類的全部信息,然后再賦值,這就是為什么還要寫一個selectAddressByIdselect語句。

(3) 一對多映射(<collection>

如果查詢的結果是多個對象(如一對多關系),可以使用 <collection> 標簽。

示例:一對多關系(用戶和訂單)

假設 t_user 表與 t_order 表之間有一對多關系,即一個用戶有多個訂單。我們可以使用 resultMap<collection> 來映射多個訂單。

t_order 表:

CREATE TABLE t_order (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    order_date DATE
);

Order 實體類:

public class Order {
    private Integer id;
    private Date orderDate;
    // Getters and Setters
}

User 實體類(修改版):

public class User {
    private Integer id;
    private String username;
    private List<Order> orders;  // 一對多的訂單列表
    // Getters and Setters
}

resultMap 示例:

<mapper namespace="com.example.mapper.UserMapper">
    <resultMap id="userResultMap" type="User">
        <result property="id" column="user_id"/>
        <result property="username" column="user_name"/>
        <collection ofType="Order" property="orders" select="selectOrdersByUserId" column="user_id"/>
    </resultMap>
    <select id="selectUserById" resultMap="userResultMap">
        SELECT user_id, user_name
        FROM t_user
        WHERE user_id = #{id}
    </select>
    <select id="selectOrdersByUserId" resultType="Order">
        SELECT id, order_date
        FROM t_order
        WHERE user_id = #{userId}
    </select>
</mapper>
  • <collection> 標簽用于一對多的關系映射。
    • property 對應 Java 類中的集合屬性(如 orders),ofType 指定集合元素的類型(如 Order),select 指定查詢訂單的 SQL。 collection ofType="Order":字面意思就是關于“Order”的集合
    • property="orders",column="user_id":表示我們要從查詢出的user_id映射到orders屬性,但是一個是Integer類,一個是List類,怎么對應?
    • select="selectOrdersByUserId":所以用指定一個查詢語句,我們可以根據這個Integer類的id(user_id )查詢出List類(這個用戶對應的所有訂單的List)

4. 總結

  • resultMap 是 MyBatis 中強大的映射工具,能夠幫助我們處理復雜的 字段到屬性的映射關系,如一對一、一對多、嵌套對象等。
  • 對于 簡單的字段映射,我們可以使用 @Results 注解;但對于 復雜的關聯(lián)關系,resultMap 給予我們更大的靈活性。
  • <association><collection>resultMap 中常用的標簽,用于處理 一對一 和 一對多 的關系映射。
  • 使用 resultMap 可以讓查詢結果映射更明確和可控,尤其適用于多表聯(lián)查或關系復雜的場景。

到此這篇關于MyBatis ResultMap 的基本用法的文章就介紹到這了,更多相關MyBatis ResultMap用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于Springboot的日志配置

    關于Springboot的日志配置

    Spring Boot默認使用LogBack日志系統(tǒng),如果不需要更改為其他日志系統(tǒng)如Log4j2等,則無需多余的配置,LogBack默認將日志打印到控制臺上,需要的朋友可以參考下
    2023-05-05
  • SpringBoot參數(shù)校驗之@Valid的使用詳解

    SpringBoot參數(shù)校驗之@Valid的使用詳解

    這篇文章主要通過示例為大家詳細介紹一下介紹了SpringBoot參數(shù)校驗中@Valid的使用方法,文中的示例代碼講解詳細,需要的可以參考一下
    2022-06-06
  • 自定義一個異常類模板的簡單實例

    自定義一個異常類模板的簡單實例

    下面小編就為大家?guī)硪黄远x一個異常類模板的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • Java NegativeArraySizeException異常解決方案

    Java NegativeArraySizeException異常解決方案

    這篇文章主要介紹了Java NegativeArraySizeException異常解決方案,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • MyBatis游標Cursor的正確使用和百萬數(shù)據傳輸?shù)膬却鏈y試

    MyBatis游標Cursor的正確使用和百萬數(shù)據傳輸?shù)膬却鏈y試

    這篇文章主要介紹了MyBatis游標Cursor的正確使用和百萬數(shù)據傳輸?shù)膬却鏈y試,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中的ThreadLocal線程池原理

    Java中的ThreadLocal線程池原理

    這篇文章主要介紹了Java中的ThreadLocal線程池原理,ThreadLocal提供了線程的局部變量(或本地變量),它可以保證訪問到的變量屬于當前線程,每個訪問這種變量的線程(通過它的get或set方法)都有自己的、獨立初始化的變量副本,需要的朋友可以參考下
    2023-11-11
  • Java中獲取子字符串的幾種方法示例

    Java中獲取子字符串的幾種方法示例

    這篇文章主要主要給大家總結了Java中獲取子字符串的幾種方法,分別是采用split的方式、采用indexOf的方式、正則和采用replaceFirst的方式這四種方法,需要的朋友可以參考借鑒,下面來看看詳細的介紹吧
    2017-01-01
  • java8 LocalDate 使用詳解

    java8 LocalDate 使用詳解

    這篇文章主要介紹了java8 LocalDate 使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 通過實例解析spring環(huán)繞通知原理及用法

    通過實例解析spring環(huán)繞通知原理及用法

    這篇文章主要介紹了通過實例解析spring環(huán)繞通知原理及用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java Optional實踐(小結)

    Java Optional實踐(小結)

    這篇文章主要介紹了Java Optional實踐(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論