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

Java中MyBatis的結(jié)果映射詳解

 更新時間:2023年08月02日 10:37:59   作者:碼匠_CodeArtist  
這篇文章主要介紹了Java中MyBatis的結(jié)果映射詳解,MyBatis 支持對各種單表查詢、關聯(lián)查詢等各種復雜查詢的結(jié)果進行映射,MyBatis 是一款優(yōu)秀的持久層框架,它的強大之處正是 SQL 語句映射,這一章介紹常用的結(jié)果映射,需要的朋友可以參考下

一、 概述

Java 數(shù)據(jù)持久層實現(xiàn)了應用程序與數(shù)據(jù)源的交互,大多數(shù)時候需要使用到各種查詢語句。

MyBatis 支持對各種單表查詢、關聯(lián)查詢等各種復雜查詢的結(jié)果進行映射。

二、結(jié)果映射

resultMap 元素是 MyBatis 中最重要最強大的元素,大部分查詢語句返回的結(jié)果,都能通過簡單的配置來返回映射的 Java 對象。

假設存在這樣一個實體模型,一個用戶對應有一個基本信息和擴展信息,對應有多個地址。

簡單講,用戶基本信息與用戶擴展信息是一對一的關系,與用戶地址是一對多的關系。

請?zhí)砑訄D片描述

創(chuàng)建實體類和數(shù)據(jù)訪問接口如下:

// 用戶基本信息實體
@Data
public class User {
    private Long id;
    private String name;
    private String username;
    private String password;
    private Integer status;
    private UserExt extend;
    private List<Address> addresses;
}
// 用戶擴展信息實體
@Data
public class UserExt {
    private Long id;
    private Long userId;
    private String phone;
    private String email;
}
// 用戶地址信息實體
@Data
public class Address {
    private Long id;
    private Long userId;
    private String address;
}
// 用戶相關接口
public interface UserExtMapper {
    // 查詢用戶基本信息
    User selectById(Long id);
    // 查詢用戶基本信息和擴展信息(一對一)
    User selectExt(Long id);
    // 查詢用戶基本信息和地址信息(一對多)
    User selectAddresses(Long id);
}

1. 基本映射

基本映射是對查詢返回的結(jié)果映射成一個最簡單的 JavaBean 類,通過類屬性對應數(shù)據(jù)庫字段進行映射。

<id><result> 元素都將列映射到一個簡單的數(shù)據(jù)類型(String, int, double 等)的屬性或字段。

其中的 property 對應 Java 類 屬性名稱,column 對應數(shù)據(jù)庫列名稱。

<mapper namespace="cn.codeartist.mybatis.mapper.UserExtMapper">
    <resultMap id="baseMap" type="User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="status" column="status"/>
    </resultMap>
    <select id="selectById" resultMap="baseMap">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
</mapper>

2. 關聯(lián)映射

關聯(lián)映射是對查詢返回的結(jié)果映射成一對一關系的嵌套類,例如查詢同時返回用戶基本信息和用戶擴展信息。

使用 <association> 元素來指定關聯(lián)映射,它可以映射一個關聯(lián)查詢語句的結(jié)果,也可以映射兩個查詢語句結(jié)合返回復雜的類型。

其中的 property 對應主表類型的屬性,column 對應主表關聯(lián)字段,javaType 對應關聯(lián)表類型,select 對應另一個查詢語句。

如果映射一個關聯(lián)語句的結(jié)果,則不會使用 select 屬性。

<mapper namespace="cn.codeartist.mybatis.mapper.UserExtMapper">
    <resultMap id="associationMap" type="User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="status" column="status"/>
        <association property="extend" column="id" javaType="UserExt" select="selectUserExtById">
            <id property="id" column="id"/>
            <result property="userId" column="user_id"/>
            <result property="phone" column="phone"/>
            <result property="email" column="email"/>
        </association>
    </resultMap>
    <select id="selectExt" resultMap="associationMap">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
    <select id="selectUserExtById" resultType="UserExt">
        SELECT * FROM t_user_ext WHERE user_id = #{id}
    </select>
</mapper>

3. 集合映射

集合映射是對查詢返回的結(jié)果映射成一對多關系的嵌套類,例如查詢同時返回用戶信息和用戶的地址信息。

使用 <collection> 元素來指定集合映射,它可以映射一個關聯(lián)查詢語句的結(jié)果,也可以映射兩個查詢語句結(jié)合返回復雜的類型。

它的用法與關聯(lián)查詢 <association> 類似,只不過指定關聯(lián)表類型需要使用 ofType 屬性,為了區(qū)分集合存儲的類型。

<mapper namespace="cn.codeartist.mybatis.mapper.UserExtMapper">
    <resultMap id="collectionMap" type="User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="status" column="status"/>
        <collection property="addresses" column="id" ofType="Address" select="selectAddressById">
            <id property="id" column="id"/>
            <result property="userId" column="user_id"/>
            <result property="address" column="address"/>
        </collection>
    </resultMap>
    <select id="selectAddresses" resultMap="collectionMap">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
    <select id="selectAddressById" resultType="Address">
        SELECT * FROM t_address WHERE user_id = #{id}
    </select>
</mapper>

同時指定集合類型和 Java 類型:

<collection property="addresses" javaType="ArrayList" column="id" ofType="Address" select="selectAddressById"/>

4. 自動映射

MyBatis 支持在簡單的場景下,可以自動映射結(jié)果,在復雜的場景下,只需描述語句之間的關系就行。

當配置自動映射結(jié)果時,數(shù)據(jù)庫列名與 Java 類屬性名稱會忽略大小寫映射,例如 ID 列會和 id 屬性進行映射。

通常數(shù)據(jù)庫列名使用下劃線規(guī)范,而 Java 屬性遵循駝峰命名,將 mapUnderscoreToCamelCase 設置為 true 時,會啟用自動映射。

例如前面的基本映射、關聯(lián)映射和集合映射可以簡化成下面配置:

<mapper namespace="cn.codeartist.mybatis.mapper.UserExtMapper">
    <resultMap id="associationMap" type="User">
        <association property="extend" column="id" javaType="UserExt" select="selectUserExtById"/>
    </resultMap>
    <resultMap id="collectionMap" type="User">
        <collection property="addresses" column="id" ofType="Address" select="selectAddressById"/>
    </resultMap>
    <select id="selectById" resultType="User">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
    <select id="selectExt" resultMap="associationMap">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
    <select id="selectUserExtById" resultType="UserExt">
        SELECT * FROM t_user_ext WHERE user_id = #{id}
    </select>
    <select id="selectAddresses" resultMap="collectionMap">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
    <select id="selectAddressById" resultType="Address">
        SELECT * FROM t_address WHERE user_id = #{id}
    </select>
</mapper>

到此這篇關于Java中MyBatis的結(jié)果映射詳解的文章就介紹到這了,更多相關MyBatis的結(jié)果映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringMVC異常處理知識點總結(jié)

    SpringMVC異常處理知識點總結(jié)

    在本篇文章里小編給大家整理的是關于SpringMVC異常處理相關知識點內(nèi)容,需要的朋友們學習下。
    2019-10-10
  • Java使用Spring Batch處理大規(guī)模數(shù)據(jù)的實踐分享

    Java使用Spring Batch處理大規(guī)模數(shù)據(jù)的實踐分享

    在處理大規(guī)模數(shù)據(jù)的場景中,批處理是一個非常常見且必要的操作,Java中的Spring Batch是一個強大的框架,能夠幫助我們高效地執(zhí)行復雜的批處理任務,本文將帶大家了解如何使用Spring Batch處理大規(guī)模數(shù)據(jù),并通過代碼示例展示如何實現(xiàn)高效的批處理,需要的朋友可以參考下
    2024-10-10
  • Java項目防止SQL注入的幾種方式

    Java項目防止SQL注入的幾種方式

    SQL注入是一種常見的攻擊方式,黑客試圖通過操縱應用程序的輸入來執(zhí)行惡意SQL查詢,從而繞過認證和授權,竊取、篡改或破壞數(shù)據(jù)庫中的數(shù)據(jù),本文主要介紹了Java項目防止SQL注入的幾種方式,感興趣的可以了解一下
    2023-12-12
  • Java參數(shù)校驗@Validated、@Valid介紹及使用詳解

    Java參數(shù)校驗@Validated、@Valid介紹及使用詳解

    Javax.validation是?spring?集成自帶的一個參數(shù)校驗接口,可通過添加注解來設置校驗條件,這篇文章主要介紹了Java參數(shù)校驗@Validated、@Valid介紹及使用詳解,需要的朋友可以參考下
    2024-08-08
  • Java截取url參數(shù)的方法

    Java截取url參數(shù)的方法

    本文給大家?guī)砹薺ava截取url參數(shù),url值得方法,代碼簡單易懂,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-08-08
  • Java調(diào)用GPU算力的實現(xiàn)示例

    Java調(diào)用GPU算力的實現(xiàn)示例

    本文主要介紹了Java調(diào)用GPU算力的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • java實現(xiàn)簡單銀行ATM系統(tǒng)

    java實現(xiàn)簡單銀行ATM系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot結(jié)合mockito測試實戰(zhàn)

    SpringBoot結(jié)合mockito測試實戰(zhàn)

    與集成測試將系統(tǒng)作為一個整體測試不同,單元測試更應該專注于某個類。所以當被測試類與外部類有依賴的時候,尤其是與數(shù)據(jù)庫相關的這種費時且有狀態(tài)的類,很難做單元測試。但好在可以通過“Mockito”這種仿真框架來模擬這些比較費時的類,從而專注于測試某個類內(nèi)部的邏輯
    2022-11-11
  • SpringBoot使用注解進行分頁的實現(xiàn)示例

    SpringBoot使用注解進行分頁的實現(xiàn)示例

    分頁使用可以說非常普遍了,有時候會需要非常靈活的方式去開啟或關閉分頁,嘗試使用一下注解的方式來進行分頁,本文主要介紹了SpringBoot使用注解進行分頁的實現(xiàn)示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 適用于Java初學者的學習路線圖

    適用于Java初學者的學習路線圖

    這篇文章主要介紹了學習Java的路線圖的五個必經(jīng)階段,還有一些作者的想法分享給大家,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論