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

mybatis中association和collection的使用與區(qū)別

 更新時間:2024年01月19日 11:23:55   作者:tanxinji  
在 MyBatis 中,<association>?和?<collection>?是用于配置結果映射中關聯(lián)關系的兩個元素,本文主要介紹了mybatis中<association>和<collection>的使用與區(qū)別,具有一定的參考價值,感興趣的可以了解一下

在 MyBatis 中,<association> 和 <collection> 是用于配置結果映射中關聯(lián)關系的兩個元素。

<association> 用于配置一對一的關聯(lián)關系,表示兩個對象之間的關系是一對一的。例如,一個訂單對象關聯(lián)一個用戶對象,使用 <association> 進行配置。

<collection> 用于配置一對多的關聯(lián)關系,表示一個對象關聯(lián)多個對象。例如,一個部門對象關聯(lián)多個員工對象,使用 <collection> 進行配置。

主要區(qū)別:

  • 關聯(lián)關系類型:<association> 表示一對一的關聯(lián)關系,而 <collection> 表示一對多的關聯(lián)關系。

  • 配置位置:<association> 和 <collection> 元素通常在 <resultMap> 中使用,用于定義結果映射規(guī)則。<association> 用于配置單個屬性的關聯(lián)關系,而 <collection> 用于配置集合屬性的關聯(lián)關系。

  • 屬性映射:<association> 使用 <id> 和 <result> 進行屬性映射的配置,用于將關聯(lián)對象的屬性與查詢結果進行映射。<collection> 除了使用 <id> 和 <result> 進行屬性映射外,還使用 <association> 進行嵌套的關聯(lián)關系配置,用于定義集合元素對象內(nèi)部的關聯(lián)關系。

  • 查詢語句:<association> 通常對應一個單獨的查詢語句,用于獲取關聯(lián)對象的數(shù)據(jù)。<collection> 通常也對應一個查詢語句,用于獲取關聯(lián)對象的集合數(shù)據(jù)。

association標簽

實體類

/**
*書籍
*/
@Data
public class Book {
    private String id;
    private String name;
    private String author;
    private Double price;
    //出版社
    private Publisher pub;//一本書對應一個出版社
}
 
/**
*出版社
*/
@Data
public class Publisher {
    private String id;
    private String name;
    private String phone;
    private String address;
}

XML關聯(lián)查詢

<!--配置關聯(lián)實體類-->
<resultMap id="bookResultMap" type="com.entity.Book">
    <!--主鍵屬性-->
    <id property="id" column="id" jdbcType="VARCHAR"></id>
    <!--普通屬性-->
    <result property="name" column="name" jdbcType="VARCHAR"></result>
    <result property="author" column="author" jdbcType="VARCHAR"></result>
    <result property="price" column="price" jdbcType="VARCHAR"></result>
    <!--一對一映射-->
    <association property="pub" javaType="com.entity.Publisher">
        <id property="id" column="id" jdbcType="VARCHAR"></id>
        <result property="name" column="name" jdbcType="VARCHAR"></result>
        <result property="phone" column="phone" jdbcType="VARCHAR"></result>
        <result property="address" column="address" jdbcType="VARCHAR"></result>
    </association>
</resultMap>
<!--關聯(lián)查詢-->
<select id="selectAllBook" resultMap="bookResultMap">
    SELECT * FROM book e
    left JOIN publisher d ON e.publisher_id = d.id
</select>

嵌套查詢

<resultMap id="bookResultMap" type="com.entity.Book">
    <!--主鍵屬性-->
    <id property="id" column="id" jdbcType="VARCHAR"></id>
    <!--普通屬性-->
    <result property="name" column="name" jdbcType="VARCHAR"></result>
    <result property="author" column="author" jdbcType="VARCHAR"></result>
    <result property="price" column="price" jdbcType="VARCHAR"></result>
    <association column="publisher_id" property="pub" 
        javaType="com.entity.Publisher" select="selectPublisher"></association>
</resultMap>
 
<!--書籍查詢-->
<select id="selectAllBook" resultMap="bookResultMap">
    select * from book
</select>
 
<!--出版社映射Map-->
<resultMap id="publisherResultMap" type="com.entity.Publisher">
    <id property="id" column="id" jdbcType="VARCHAR"></id>
    <result property="name" column="name" jdbcType="VARCHAR"></result>
    <result property="phone" column="phone" jdbcType="VARCHAR"></result>
    <result property="address" column="address" jdbcType="VARCHAR"></result>
</resultMap>
 
<!--嵌套查詢-->
<select id="selectPublisher" resultMap="publisherResultMap">
    SELECT * FROM publisher d
    WHERE d.id = #{publisher_id}
</select>

collection標簽

<collection>和<association>標簽屬性基本相同,就多了一個ofType屬性。

實體類

/**
*出版社
*/
@Data
public class Publisher {
    private String id;
    private String name;
    private String phone;
    private String address;
    // 書籍列表
    List<Book> bookList;//一個出版社對應多本書
}
/**
*書籍
*/
@Data
public class Book {
    private String id;
    private String name;
    private String author;
    private Double price;
}

XML關聯(lián)查詢

<resultMap id="publisherResultMap" type="com.entity.Publisher">
    <id property="id" column="id" jdbcType="VARCHAR"></id>
    <result property="name" column="name" jdbcType="VARCHAR"></result>
    <result property="phone" column="phone" jdbcType="VARCHAR"></result>
    <result property="address" column="address" jdbcType="VARCHAR"></result>
    <collection property="bookList" ofType="com.entity.Book">
        <id property="id" column="id" jdbcType="VARCHAR"></id>
        <result property="name" column="name" jdbcType="VARCHAR"></result>
        <result property="author" column="author" jdbcType="VARCHAR"></result>
        <result property="price" column="price" jdbcType="VARCHAR"></result>
    </collection>
</resultMap>
 
<select id="selectAllPublisher" resultMap="publisherResultMap">
    SELECT * FROM publisher d
    left JOIN book e ON e.publisher_id = d.id
</select>

嵌套查詢

<resultMap id="publisherResultMap" type="com.entity.Publisher">
    <id property="id" column="id" jdbcType="VARCHAR"></id>
    <result property="name" column="name" jdbcType="VARCHAR"></result>
    <result property="phone" column="phone" jdbcType="VARCHAR"></result>
    <result property="address" column="address" jdbcType="VARCHAR"></result>
    <collection column="id" property="bookList" 
        javaType="java.util.ArrayList" ofType="com.entity.Book"
       select="selectBookList"/>
</resultMap>
 
<select id="selectAllPublisher" resultMap="publisherResultMap">
    SELECT * FROM publisher d
</select>
 
<resultMap id="bookResultMap" type="com.worldly.config.entity.Employee">
    <id property="id" column="id" jdbcType="VARCHAR"></id>
    <result property="name" column="name" jdbcType="VARCHAR"></result>
    <result property="author" column="author" jdbcType="VARCHAR"></result>
    <result property="price" column="price" jdbcType="VARCHAR"></result>
</resultMap>
 
<select id="selectBookList" resultMap="bookResultMap">
    SELECT * FROM book e
    WHERE e.publisher_id = #{id}
</select>

多條件查詢

修改collection標簽的column屬性,{參數(shù)名1=列名1,參數(shù)名2=列名2}

/**
*出版社
*/
@Data
public class Publisher {
    private String id;
    private String name;
    private String phone;
    private String address;
    // 新增---狀態(tài)
    private String status;
    // 書籍列表
    List<Book> bookList;//一個出版社對應多本書
}
/**
*書籍
*/
@Data
public class Book {
    private String id;
    private String name;
    private String author;
    private Double price;
    // 新增---狀態(tài)
    private String status;
}
<!--修改collection標簽的column屬性-->
<collection column="{publisherId=id,status=status}" property="bookList" 
        javaType="java.util.ArrayList" ofType="com.entity.Book"
       select="selectBookList"/>
 
<select id="selectEmpBydepId" resultMap="empResultMap">
    SELECT * FROM book e
    WHERE e.publisher_id = #{publisherId} AND e.status=#{status}
</select>

示例

下面是一個示例的 Java 實體類,用于表示訂單(Order)、用戶(User)和訂單項(OrderItem)的關系:

public class Order {
    private int orderId;
    private String orderNumber;
    private User user;
    private List<OrderItem> orderItems;
    
}

public class User {
    private int userId;
    private String username;
    
}

public class OrderItem {
    private int orderItemId;
    private String itemName;
    private int quantity;
    
}

在上述示例中,Order 類表示訂單,包含了訂單的基本信息(orderId 和 orderNumber),以及關聯(lián)的用戶對象(user)和訂單項對象集合(orderItems)。

User 類表示用戶,包含了用戶的基本信息(userId 和 username)。

OrderItem 類表示訂單項,包含了訂單項的基本信息(orderItemIditemName 和 quantity)。

xml配置:當使用 MyBatis 的 XML 配置文件進行結果映射時,以下是 <association> 和 <collection> 元素的示例配置:

<resultMap id="orderResultMap" type="Order">
  <id property="orderId" column="order_id" />
  <result property="orderNumber" column="order_number" />
  
  <association property="user" javaType="User">
    <id property="userId" column="user_id" />
    <result property="username" column="username" />
  </association>
  
  <collection property="orderItems" ofType="OrderItem">
    <id property="orderItemId" column="item_id" />
    <result property="itemName" column="item_name" />
    <result property="quantity" column="quantity" />
  </collection>
</resultMap>


  <select id="getOrderById" resultMap="orderResultMap">
    SELECT * FROM orders WHERE order_id = #{orderId}
  </select>

使用 <association> 配置了 user 屬性的關聯(lián)關系。property 屬性指定了關聯(lián)屬性的名稱為 user,javaType 屬性指定了關聯(lián)屬性的類型為 User。在 <association> 元素內(nèi)部,使用 <id> 和 <result> 元素進行屬性映射的配置。

使用 <collection> 配置了 orderItems 屬性的關聯(lián)關系。property 屬性指定了關聯(lián)屬性的名稱為 orderItems,ofType 屬性指定了集合元素的類型為 OrderItem。在 <collection> 元素內(nèi)部,同樣使用 <id> 和 <result> 元素進行屬性映射的配置。

到此這篇關于mybatis中<association>和<collection>的使用與區(qū)別的文章就介紹到這了,更多相關mybatis <association>和<collection>內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • selenium高效應對Web頁面元素刷新的實例講解

    selenium高效應對Web頁面元素刷新的實例講解

    今天小編就為大家分享一篇selenium高效應對Web頁面元素刷新的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • No ‘Access-Control-Allow-Origin‘ header is present跨域及解決

    No ‘Access-Control-Allow-Origin‘ header is&nb

    這篇文章主要介紹了No ‘Access-Control-Allow-Origin‘ header is present跨域及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Springboot配置AOP的注解切點失效解決方案

    Springboot配置AOP的注解切點失效解決方案

    本文探討了在Spring框架中使用AOP攔截靜態(tài)方法調(diào)用的實現(xiàn)細節(jié),重點在于ApplicationContext和ApplicationContextAware接口的使用差異,通過對比兩種獲取Bean的方式,最終解決了切點無法被攔截的問題
    2026-06-06
  • MyBatis防止SQL注入攻擊的有效方法

    MyBatis防止SQL注入攻擊的有效方法

    SQL注入是Web應用中最常見且危害極大的安全漏洞之一,作為Java生態(tài)中廣泛使用的持久層框架,MyBatis提供了多種機制來防范SQL注入攻擊,本文將深入探討MyBatis的防注入原理、最佳實踐以及常見誤區(qū),幫助開發(fā)者構建更安全的數(shù)據(jù)庫應用,需要的朋友可以參考下
    2025-05-05
  • java Signleton模式詳解及示例代碼

    java Signleton模式詳解及示例代碼

    Singleton模式是創(chuàng)建模式。這種模式只涉及一個類是負責創(chuàng)建自己的對象。該類確保只有一個對象獲得創(chuàng)建。這個類提供了一種方法來訪問它的唯一對象
    2016-10-10
  • spring boot整合Cucumber(BDD)的方法

    spring boot整合Cucumber(BDD)的方法

    本篇文章主要介紹了spring boot整合Cucumber(BDD)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java手動方式創(chuàng)建枚舉類示例

    Java手動方式創(chuàng)建枚舉類示例

    這篇文章主要介紹了Java手動方式創(chuàng)建枚舉類,結合實例形式分析了java創(chuàng)建枚舉類的方法及相關操作技巧,需要的朋友可以參考下
    2019-08-08
  • SpringBoot如何返回Json數(shù)據(jù)格式

    SpringBoot如何返回Json數(shù)據(jù)格式

    這篇文章主要介紹了SpringBoot如何返回Json數(shù)據(jù)格式問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java流式操作之Collectors工具類操作指南

    Java流式操作之Collectors工具類操作指南

    Collectors是Collector的工具類,類中提供了很多流收集、歸約、分組、分區(qū)等方法,方便我們直接使用,下面這篇文章主要給大家介紹了關于Java流式操作之Collectors工具類操作的相關資料,需要的朋友可以參考下
    2023-05-05
  • 微信小程序與AspNetCore SignalR聊天實例代碼

    微信小程序與AspNetCore SignalR聊天實例代碼

    這篇文章主要介紹了微信小程序與AspNetCore SignalR聊天實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08

最新評論

化州市| 长顺县| 乾安县| 汤原县| 保德县| 武汉市| 玉门市| 灵石县| 从化市| 崇礼县| 南乐县| 河北区| 沁水县| 尉氏县| 会同县| 西峡县| 仁化县| 黑山县| 青浦区| 盘锦市| 新巴尔虎右旗| 峨眉山市| 青铜峡市| 昌邑市| 抚松县| 青海省| 东乡族自治县| 阿拉尔市| 英吉沙县| 铜鼓县| 岳西县| 绥中县| 鄂温| 镇雄县| 兖州市| 青阳县| 朝阳区| 平昌县| 南汇区| 民县| 沙河市|