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

Mybatis一對多查詢列表屬性處理示例詳解

 更新時間:2023年05月13日 11:15:11   作者:金丹期CV攻城獅  
使用MyBatis進行多表聯(lián)查的關鍵是構建數(shù)據(jù)庫中表的字段和java中對象的屬性的映射關系,下面這篇文章主要給大家介紹了關于Mybatis一對多查詢列表屬性處理的相關資料,需要的朋友可以參考下

一、說明

1.<collection>標簽屬性說明

  • property:指定主對象中的集合屬性名稱。
  • ofType:指定集合元素的類型。默認值為java.lang.Object??梢酝ㄟ^指定 ofType 屬性來指定集合元素的類型。
  • column:指定集合元素所用的列名,用于匹配結果集中的列。(內層select關聯(lián)字段,若不指定則默認使用外鍵對應的主鍵作為column屬性的值)
  • columnPrefix: 指定集合元素所用的列名前綴,用于匹配結果集中的列。(用于平鋪查詢方式下內層列映射自動匹配)
  • select:指定獲取集合元素的 SQL 查詢語句。
  • resultSetType:指定 SQL 查詢結果集的類型,默認值為FORWARD_ONLY,還可以設置為SCROLL_SENSITIVE和SCROLL_INSENSITIVE,具體的用法可以參考JDBC文檔。
  • fetchType:指定集合的加載方式,默認值為“lazy”,可選值為“eager”,當 fetchType 屬性設置為“eager”時,MyBatis會在執(zhí)行 SQL 語句返回結果集后,立即加載集合元素。
  • javaType: 指定集合的 Java 類型,通常不需要指定,MyBatis會根據(jù)集合屬性的類型自動推斷。
  • jdbcType: 指定集合屬性在數(shù)據(jù)庫中的類型,可以參考 JDBC 中的類型定義。如果不指定,MyBatis會自動推斷。
  • notNullColumn:指定一個或多個屬性列的名稱,這些列不能為空。當這些屬性列為空時,MyBatis會拋出異常。notNullColumn 屬性可以使用逗號(,)分隔,以指定多個屬性列。
  • columnOverride:指定一個或多個元素屬性與結果集中列的映射關系。
  • typeHandler:指定一個元素屬性的類型處理器。
  • ofTypeHandler:指定集合元素的類型處理器。
  • resultMap:指定集合元素的映射器,通常是通過嵌套 result 標簽來定義,并使用該 resultMap 的 id 來指定。
  • orderBy:指定升序或降序。多個排序條件時,用空格分開。例如orderBy="id desc,create_time asc"表示先按id降序,再按createTime升序排列。(不推薦使用,建議在SQL中手動指定排序方式)
  • notNullColumn:指定一個或多個屬性列的名稱,這些列不能為空。當這些屬性列為空時,MyBatis會拋出異常。notNullColumn 屬性可以使用逗號(,)分隔,以指定多個屬性列。
  • statementType:指定操作執(zhí)行的SQL類型,有STATEMENT,PREPARED和CALLABLE三種,分別代表簡單語句、預處理語句和調用存儲過程。默認值為PREPARED。

columnPrefix用法

如果使用了 columnPrefix 屬性,可以省略 result 標簽中的 column 屬性,并且 MyBatis 會自動完成屬性與列名之間的映射。

<resultMap id="userResultMap" type="User">
  <id column="user_id" property="id"/>
  <result column="user_name" property="name"/>
  <collection property="roles" ofType="Role">
    <id column="role_id" property="id"/>
    <result column="role_name" property="name"/>
  </collection>
</resultMap>

改用columnPrefix前綴寫法簡化代碼,使用使用時,多使用表別名作為列前綴,例如columnPrefix="r."

<resultMap id="userResultMap" type="User">
  <id column="user_id" property="id"/>
  <result column="user_name" property="name"/>
  <collection property="roles" ofType="Role" columnPrefix="role_">
    <id column="role_id" property="id"/>
    <result property="name"/>
  </collection>
</resultMap>

mybatis 官方文檔

2. 示例代碼

實體類

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private List<Order> orders;

    // 省略 getter 和 setter 方法
}

public class Order {
    private Integer id;
    private String orderNo;
    private Date createTime;

    // 省略 getter 和 setter 方法
}

二、平鋪查詢

可結合columnPrefix、resultMap使用

Mybatis XML

<select id="getUserOrdersById" resultMap="userResultMap">
  SELECT u.id, u.name, u.age, o.id AS order_id, o.order_no, o.create_time
  FROM user u
  INNER JOIN `order` o ON u.id = o.user_id
  WHERE u.id = #{id}
</select>
<resultMap id="userResultMap" type="com.example.User">
  <id property="id" column="id" />
  <result property="name" column="name" />
  <result property="age" column="age" />
  <collection property="orders" ofType="com.example.Order" resultMap="orderResultMap" />
</resultMap>
<resultMap id="orderResultMap" type="com.example.Order">
  <id property="id" column="order_id" />
  <result property="orderNo" column="order_no" />
  <result property="createTime" column="create_time" />
</resultMap>

三、 嵌套查詢(Nested Select for Collection)

嵌套查詢支持惰性加載,可通過設置fetchType調整集合加載方式,默認值為“lazy”,可選值為“eager”。

3.1 外鍵查詢

<select id="getUserOrdersById" resultMap="userResultMap">
  SELECT u.id, u.name, u.age
  FROM user u
  WHERE u.id = #{id}
</select>
<select id="getOrderByUserId" resultMap="orderResultMap">
  SELECT o.id, o.order_no, o.create_time
  FROM `order` o
  WHERE o.user_id = #{userId}
</select>
<resultMap id="orderResultMap" type="com.example.Order">
  <id property="id" column="order_id" />
  <result property="orderNo" column="order_no" />
  <result property="createTime" column="create_time" />
</resultMap>
<resultMap id="userResultMap" type="com.example.User">
  <id property="id" column="id" />
  <result property="name" column="name" />
  <result property="age" column="age" />
  <collection property="orders" ofType="com.example.Order" resultMap="orderResultMap" select="getOrderByUserId" column="id">
      <!-- 這里使用 column="id",指定了內層 select 語句的參數(shù)值為外層查詢語句結果集中的 id 屬性值(即用戶ID) -->
  </collection>
</resultMap>

3.2 select傳入多個參數(shù)

上面講到指定select嵌套sql時,需要指定column="id",如果內層SQL需要傳入多個參數(shù)時,可采用如下方式

public class OrderQuery {
    private Long userId; // 用戶id
    private Integer status; // 訂單狀態(tài)
    // getter和setter方法
}
<select id="getOrdersByUserId" resultType="Order">
    SELECT *
    FROM `order`
    WHERE user_id = #{userId}
    AND status = #{status}
</select>
<resultMap id="userMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
    <!-- 注意這里的association標簽的select屬性使用了OrderQuery對象的屬性 -->
    <result property="orders" column="id" 
            select="com.example.mapper.OrderMapper.getOrdersByUserId">
        <association property="param" javaType="OrderQuery">
            <result property="userId" column="id"/>
            <result property="status" value="1"/> <!-- 這里傳遞的是固定值,也可以替換為動態(tài)的表達式 -->
        </association>
    </result>
</resultMap>

association一對一屬性處理

上面介紹一對多查詢列表屬性處理,其實association更常用于一對一屬性的處理上

package com.example;

public class Order {
  private int orderId;
  private String orderName;
  private Customer customer;

  // getters and setters for orderId, orderName, customer
}

package com.example;

public class Customer {
  private int customerId;
  private String customerName;

  // getters and setters for customerId, customerName
}
<resultMap id="orderMap" type="com.example.Order">
  <id property="orderId" column="order_id"/>
  <result property="orderName" column="order_name"/>
  <association property="customer" javaType="com.example.Customer">
    <id property="customerId" column="customer_id"/>
    <result property="customerName" column="customer_name"/>
  </association>
</resultMap>

在這個例子中,Order類有一個Customer屬性,我們使用Association關聯(lián)對象將query出的Customer映射到Order對象的Customer屬性上。
需要注意的是,Association也可以嵌套使用,我們可以通過多層Association實現(xiàn)多個對象之間的關聯(lián)。此外,需要注意的是,在映射關聯(lián)對象Association時要確保SQL語句中的JOIN操作正確無誤。

總結

到此這篇關于Mybatis一對多查詢列表屬性處理的文章就介紹到這了,更多相關Mybatis一對多查詢列表屬性內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Jenkins之Log Parse使用方法詳解

    Jenkins之Log Parse使用方法詳解

    這篇文章主要為大家詳細介紹了Jenkins插件Log Parse使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java實現(xiàn)簡單密碼加密功能

    Java實現(xiàn)簡單密碼加密功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單密碼加密功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Spring Security基于數(shù)據(jù)庫的ABAC屬性權限模型實戰(zhàn)開發(fā)教程

    Spring Security基于數(shù)據(jù)庫的ABAC屬性權限模型實戰(zhàn)開發(fā)教程

    這篇文章主要介紹了Spring Security基于數(shù)據(jù)庫的ABAC屬性權限模型實戰(zhàn)開發(fā)教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2025-04-04
  • spring是如何實現(xiàn)聲明式事務的

    spring是如何實現(xiàn)聲明式事務的

    這篇文章主要介紹了spring是如何實現(xiàn)聲明式事務的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Java8 HashMap擴容算法實例解析

    Java8 HashMap擴容算法實例解析

    這篇文章主要介紹了Java8 HashMap擴容算法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java使用Jsoup解析html網(wǎng)頁的實現(xiàn)步驟

    Java使用Jsoup解析html網(wǎng)頁的實現(xiàn)步驟

    Jsoup是一個用于解析HTML文檔的Java庫,本文主要介紹了Java使用Jsoup解析html網(wǎng)頁的實現(xiàn)步驟,可以提取文本、鏈接、圖片等,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 解決Idea啟動Spring Boot很慢的問題

    解決Idea啟動Spring Boot很慢的問題

    這篇文章主要介紹了解決Idea啟動Spring Boot很慢的問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • springboot+thymeleaf打包成jar后找不到靜態(tài)資源的坑及解決

    springboot+thymeleaf打包成jar后找不到靜態(tài)資源的坑及解決

    這篇文章主要介紹了springboot+thymeleaf打包成jar后找不到靜態(tài)資源的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    這篇文章主要介紹了Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Java字典生成算法講解

    Java字典生成算法講解

    今天小編就為大家分享一篇關于Java字典生成算法講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

韶山市| 谷城县| 贵州省| 曲水县| 盐亭县| 鄯善县| 固阳县| 海原县| 英山县| 花垣县| 松江区| 喀喇| 偏关县| 比如县| 昌乐县| 阿拉善左旗| 博兴县| 松滋市| 安福县| 西盟| 隆子县| 阜阳市| 横山县| 清流县| 蓬安县| 长子县| 奉新县| 墨竹工卡县| 五寨县| 永丰县| 彝良县| 广西| 南平市| 桃江县| 石林| 五寨县| 鸡西市| 嵊州市| 黄石市| 应城市| 阳东县|