【SSM框架】MyBatis筆記 --- 表之間的關聯關係;MyBatis事務;MyBatis緩存機制;ORM概述

来源:https://www.cnblogs.com/Burning-youth/archive/2022/05/11/16256206.html
-Advertisement-
Play Games

MyBatis框架提供兩級緩存,一級緩存和二級緩存,預設開啟一級緩存。緩存就是為了提交查詢效率 ...


一、表之間的關聯關係:


  • 關聯關係是有方向的。

1、四種關聯關係:

1)一對多關聯:一個老師可以教多個學生,多個學生只有一個老師來教,站在老師方,就是一對多關聯。

2)多對一關聯:一個老師可以教多個學生,多個學生只有一個老師來教,站在學生方,就是多對一關聯。

3)一對一關聯:一個老師輔導一個學生,一個學生只請教一個老師,學生和老師是一對一。

4)多對多關聯:園區劃線的車位和園區的每一輛車,任意一個車位可以停任意一輛車,任意一車輛車可以停在任意一個車位上。

 

2、一對多關聯關係:

客戶和訂單就是典型的一對多關聯關係;

一個客戶名下可以有多個訂單;

客戶表是一方,訂單表是多方.客戶一中持有訂單的集合;

使用一對多的關聯關係,可以滿足查詢客戶的同時查詢該客戶名下的所有訂單.;

 

需求:根據客戶的id查詢客戶所有信息並同時查詢該客戶名下的所有訂單    

<!--
    //customer表中的三個列
    private Integer id;
    private String name;
    private Integer age;
    //該客戶名下的所有訂單的集合
    private List<Orders> ordersList;
-->
<resultMap id="customermap" type="customer">
    <!--主鍵綁定-->
    <id property="id" column="cid"></id>
    <!--非主鍵綁定-->
    <result property="name" column="name"></result>
    <result property="age" column="age"></result>

    <!--多出來的一咕嚕綁定ordersList
        Orders實體類:
        private Integer id;
        private String orderNumber;
        private Double orderPrice;
        -->
    <collection property="ordersList" ofType="orders">
        <!--主鍵綁定-->
        <id property="id" column="oid"></id>
        <!--非主鍵綁定-->
        <result property="orderNumber" column="orderNumber"></result>
        <result property="orderPrice" column="orderPrice"></result>
    </collection>
</resultMap>
<select id="getById" parameterType="int" resultMap="customermap">
    select c.id cid,name,age,o.id oid,orderNumber,orderPrice,customer_id
    from customer c 
    left ,join orders o on c.id = o.customer_id
    where c.id=#{id}
</select>

 

3、多對一關聯關係:

訂單和客戶就是多對一關聯;

站在訂單的方向查詢訂單的同時將客戶信息查出;

訂單是多方,會持有一方的對象,客戶是一方;
 

需求:根據訂單的id查詢訂單所有信息並同時查詢該訂單對應的用戶信息

<mapper namespace="com.bjpowernode.mapper.OrdersMapper">
<!--
        實體類
        private Integer id;
        private String orderNumber;
        private Double orderPrice;

        //關聯下此訂單的客戶信息,多方持有一方的對象
        private Customer customer;
-->
    <resultMap id="ordersmap" type="orders">
        <!--主鍵綁定-->
        <id property="id" column="oid"></id>
        <!--非主鍵綁定-->
        <result property="orderNumber" column="orderNumber"></result>
        <result property="orderPrice" column="orderPrice"></result>
        <!--多出來的一咕嚕綁定
            private Integer id;
            private String name;
            private Integer age;

            //該客戶名下的所有訂單的集合,一方持有多方的集合
            private List<Orders> ordersList; //不用管
        -->
        <association property="customer" javaType="customer">
            <id property="id" column="cid"></id>
            <result property="name" column="name"></result>
            <result property="age" column="age"></result>
        </association>
    </resultMap>
    <select id="getById" parameterType="int" resultMap="ordersmap">
        select o.id oid,orderNumber,orderPrice,customer_id,c.id cid,name,age
        from orders o inner join customer c on o.customer_id = c.id
        where o.id=#{id}
    </select>
</mapper>


總結:無論是什麼關聯關係,如果某方持有另一方的集合,則使用<collection>標簽完成映射,如果某方持有另一方的對象,則使用<association>標簽完成映射。

 

 

二、事務:


  • 多個操作同時完成,或同時失敗稱為事務處理。事務有四個特性:一致性,持久性,原子性,隔離性.

 

  在MyBatis框架中設置事務:

<!--程式員自己控制處理的提交和回滾-->
<transactionManager type="JDBC"></transactionManager> 

  

//預設是手工提交事務,設置為false也是手工提交事務,如果設置為true,則為自動提交.
sqlSession = factory.openSession();  
//設置為自動提交,在增刪改後不需要commit();
sqlSession = factory.openSession(true);  

 

 

三、緩存:


  • MyBatis框架提供兩級緩存,一級緩存和二級緩存,預設開啟一級緩存。緩存就是為了提交查詢效率。

1、使用緩存後,查詢的流程:

查詢時先到緩存里查,如果沒有則查詢資料庫,放緩存一份,再返回客戶端,下次再查詢的時候直接從緩存返回,不再訪問資料庫;

如果資料庫中發生commit()操作,則清空緩存。

 

2、一級緩存使用的是SqlSession的作用域,同一個sqlSession共用一級緩存的數據。

二級緩存使用的是mapper的作用域,不同的sqlSession只要訪問的同一個mapper.xml文件,則共用二級緩存作用域。

 

 

四、ORM:


  • ORM(Object Relational Mapping):對象關係映射

1、MyBatis框架是ORM非常優秀的框架。

     java語言中以對象的方式操作數據,存到資料庫中是以表的方式進行存儲,對象中的成員變數與表中的列之間的數據互換稱為映射,整個這套操作就是ORM。

2、持久化的操作:將對象保存到關係型資料庫中 ,將關係型資料庫中的數據讀取出來以對象的形式封裝

     MyBatis是持久化層優秀的框架。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 8 個你應該立即停止使用的無效 HTML 元素 HTML 規範的開發是一個漸進的過程,有時會出現問題。隨著時間的推移,許多元素和屬性被添加到 HTML 中,直到後來 Web 社區集體意識到有更好的方法時才被刪除。由於已棄用和過時的元素和屬性已經存在於網路上,因此許多現代瀏覽器繼續支持它們的使用。儘管 ...
  • 前言 在我們日常代碼開發過程中,組件的使用是必不可少的,我們也會去封裝組件。但是大家寫組件的風格各式各樣,沒有一個統一的準則。而且也沒有遵循軟體開發的原則:高內聚、低耦合;因為我是給行業提供代碼的,行業給交付提供代碼。我們要儘量去減少大家的接入成本,降低接入成本的最好方案就是我們在設計組件的時候編寫 ...
  • HBuilderx快速新建VUE項目 一、安裝HBuilderx開發工具 官網:HBuilderX HBuilderXH是HTML的第一個字母,Builder是builder,X是HBuilder的下一個版本。我們也被稱為HX。 HBuilderX是輕量級但功能強大的 IDE。 它的官網上介紹到HB ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、面向對象 一般使用字面量的形式直接創建對象,但是這種創建方式對於創建大量相似對象的時候,會產生大量的重覆代碼。但 js和一般的面向對象的語言不同,在 ES6 之前它沒有類的概念。但是可以使用函數來進行模擬,從而產生出可復用的對象創建方 ...
  • DNS 解析:將功能變數名稱解析成 IP 地址 TCP 連接:TCP 三次握手 發送 HTTP 請求 伺服器處理請求並返回 HTTP 報文 瀏覽器解析渲染頁面 斷開連接:TCP 四次揮手 一、什麼是URL? URL(Uniform Resource Locator),統一資源定位符,用於定位互聯網上資源,俗 ...
  • 一、什麼是跨域 當a.qq.com功能變數名稱下的頁⾯或腳本試圖去請求b.qq.com功能變數名稱下的資源時,就是典型的跨域行為。跨域的定義從受限範圍可以分為兩種,⼴義跨域和狹義跨域。 (一)廣義跨域 ⼴義跨域通常包含以下三種⾏為:1. 資源跳轉:a鏈接、重定向。2. 資源嵌⼊:<link>、<script>、<i ...
  • 購物車可以說是電商平臺的一個標配了,起初是用於多種商品的結算,現在很多用戶也把購物車當作臨時收藏來使用,這裡嘗試做一個基本的購物車架構設計。 用例分析 加入購物車、查看購物車、修改數量或者規格、移除商品、清空購物車,是一個購物車最基本的功能。 關鍵流程 1.查看購物車 關鍵點: 1)商品狀態判斷:上 ...
  • 背景: 當我們使用微服務時,若想在本地聯調就需要啟動多個服務,為了避免本地啟動過多服務,現將註冊中心等基礎服務共用。當我們在服務A開發時,都是註冊到同一個nacos,這樣本地和開發環境的服務A就會同時存在,當調用服務時就會使用負載均衡選擇服務,導致我們無法正常調試介面。這時我們可以選擇使用灰度版本來 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...