最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis ResultMap 的基本用法示例詳解

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

MyBatis 中的 resultMap

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

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

1. resultMap 的基本語法

resultMap 通常寫在 MyBatis 的 Mapper.xml 文件中,通過 <resultMap> 標(biāo)簽定義。以下是 resultMap 的基本語法結(jié)構(gòu):

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

2. 簡(jiǎn)單的 resultMap 示例

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

t_user 表:

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

User 實(shí)體類:

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> 標(biāo)簽用于定義數(shù)據(jù)庫(kù)列和 Java 屬性之間的映射。
  • <result> 標(biāo)簽用于指定字段和屬性的具體映射關(guān)系(**<resultMap>**中用于具體描述映射關(guān)系的子標(biāo)簽)。column 是數(shù)據(jù)庫(kù)列名,property 是 Java 實(shí)體類的屬性。

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

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

3. 常用的 resultMap 功能

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

有時(shí)數(shù)據(jù)庫(kù)的列名與 Java 類的屬性名不一致,resultMap 可以幫助處理這種映射。使用 column 來指定數(shù)據(jù)庫(kù)中的列名,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) 一對(duì)一映射(<association>

如果查詢的結(jié)果需要映射到一個(gè)嵌套的對(duì)象(如一對(duì)一關(guān)系),可以使用 <association> 標(biāo)簽。

示例:一對(duì)一關(guān)系(用戶和地址)

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

t_address 表:

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

Address 實(shí)體類:

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

User 實(shí)體類(修改版):

public class User {
    private Integer id;
    private String username;
    private Address address;  // 關(guān)聯(lián)一個(gè) Address 對(duì)象
    // 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> 標(biāo)簽實(shí)現(xiàn) 一對(duì)一 映射,property 是 Java 對(duì)象中的屬性(address),column 是數(shù)據(jù)庫(kù)中關(guān)聯(lián)的列(address_id)。
  • javaType 是關(guān)聯(lián)對(duì)象的類型(Address),select 屬性指定了通過 address_id 查詢地址完整信息的 SQL 查詢。

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

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

如果查詢的結(jié)果是多個(gè)對(duì)象(如一對(duì)多關(guān)系),可以使用 <collection> 標(biāo)簽。

示例:一對(duì)多關(guān)系(用戶和訂單)

假設(shè) t_user 表與 t_order 表之間有一對(duì)多關(guān)系,即一個(gè)用戶有多個(gè)訂單。我們可以使用 resultMap<collection> 來映射多個(gè)訂單。

t_order 表:

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

Order 實(shí)體類:

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

User 實(shí)體類(修改版):

public class User {
    private Integer id;
    private String username;
    private List<Order> orders;  // 一對(duì)多的訂單列表
    // 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> 標(biāo)簽用于一對(duì)多的關(guān)系映射。
    • property 對(duì)應(yīng) Java 類中的集合屬性(如 orders),ofType 指定集合元素的類型(如 Order),select 指定查詢訂單的 SQL。 collection ofType="Order":字面意思就是關(guān)于“Order”的集合
    • property="orders",column="user_id":表示我們要從查詢出的user_id映射到orders屬性,但是一個(gè)是Integer類,一個(gè)是List類,怎么對(duì)應(yīng)?
    • select="selectOrdersByUserId":所以用指定一個(gè)查詢語句,我們可以根據(jù)這個(gè)Integer類的id(user_id )查詢出List類(這個(gè)用戶對(duì)應(yīng)的所有訂單的List)

4. 總結(jié)

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

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

相關(guān)文章

  • Springboot+MyBatis進(jìn)行日志輸出參考示例

    Springboot+MyBatis進(jìn)行日志輸出參考示例

    這篇文章主要給大家介紹了關(guān)于Springboot+MyBatis進(jìn)行日志輸出的相關(guān)資料,在項(xiàng)目開發(fā)過程中,日志是必不可少的,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Java計(jì)算百分比的各種方法總結(jié)

    Java計(jì)算百分比的各種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java計(jì)算百分比的各種方法,要計(jì)算百分比并保留兩位小數(shù),首先需要明確計(jì)算公式和java語言的數(shù)學(xué)計(jì)算方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Java面試題沖刺第十二天--數(shù)據(jù)庫(kù)(2)

    Java面試題沖刺第十二天--數(shù)據(jù)庫(kù)(2)

    這篇文章主要為大家分享了最有價(jià)值的三道數(shù)據(jù)庫(kù)面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot基于Swagger2構(gòu)建API文檔過程解析

    SpringBoot基于Swagger2構(gòu)建API文檔過程解析

    這篇文章主要介紹了SpringBoot基于Swagger2構(gòu)建API文檔過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON

    java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON

    本篇文章主要介紹了java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON,Jackson將Java對(duì)象轉(zhuǎn)換成json對(duì)象和xml文檔,同樣也可以將json、xml轉(zhuǎn)換成Java對(duì)象,有興趣的可以了解一下。
    2017-02-02
  • SpringBoot?整合數(shù)據(jù)源的具體實(shí)踐

    SpringBoot?整合數(shù)據(jù)源的具體實(shí)踐

    本文主要介紹了SpringBoot?整合數(shù)據(jù)源的具體實(shí)踐,利用?Spring?Boot?的自動(dòng)配置和簡(jiǎn)化的注解來簡(jiǎn)化數(shù)據(jù)源配置工作,從而更專注于應(yīng)用程序的業(yè)務(wù)邏輯開發(fā),感興趣的可以了解一下
    2023-11-11
  • Elasticsearch學(xué)習(xí)之Terms?set?查詢

    Elasticsearch學(xué)習(xí)之Terms?set?查詢

    這篇文章主要為大家介紹了Elasticsearch學(xué)習(xí)Terms?set?查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • springboot整合nacos,如何讀取nacos配置文件

    springboot整合nacos,如何讀取nacos配置文件

    這篇文章主要介紹了springboot整合nacos,如何讀取nacos配置文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java使用XSSFWorkbook實(shí)現(xiàn)讀寫Excel

    java使用XSSFWorkbook實(shí)現(xiàn)讀寫Excel

    這篇文章主要為大家詳細(xì)介紹了java如何通過使用XSSFWorkbook實(shí)現(xiàn)讀寫Excel功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • java利用遞歸實(shí)現(xiàn)類別樹示例代碼

    java利用遞歸實(shí)現(xiàn)類別樹示例代碼

    這篇文章主要給大家介紹了關(guān)于java利用遞歸實(shí)現(xiàn)類別樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

治多县| 永川市| 尼木县| 漳浦县| 冕宁县| 英山县| 马山县| 萍乡市| 沭阳县| 晋城| 上饶市| 邢台市| 中江县| 宁安市| 武定县| 漳州市| 平乐县| 呼玛县| 洪雅县| 额尔古纳市| 榆中县| 白玉县| 宝坻区| 宁波市| 京山县| 工布江达县| 化隆| 东乌珠穆沁旗| 景德镇市| 常宁市| 葫芦岛市| 禹州市| 朝阳区| 东辽县| 灵璧县| 郴州市| 桃江县| 玉溪市| 海晏县| 宜昌市| 甘谷县|