【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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...