java學習總結(四)MyBatis多表

一、多表結構

學生表、班級表、課程表、班級課程表

二、一對一

一個學生只屬于一個班級。

查詢:id name age gender banjiName

SELECT s.id,s.`name`,s.age,s.gender,b.id AS banjiId,b.name AS banjiName
FROM student AS s INNER JOIN banji AS b
ON s.banji_id=b.id;

public class Student{private Integer id;private String name;private Integer age;private Banji banji;
}
MyBatis中使用association標簽解決一對一關聯查詢,association標簽可以使用的屬性如下:
  1. property:對象屬性的名稱
  2. javaType:對象以昂屬性的類型
  3. column:數據庫中字段的名稱(也可能是起的別名)
public void testOne2One() {SqlSession sqlSession = MyBatisUtil.getSqlSession();// 最終返回的是一個學生的集合,但是Student里面是有一個banji對象,里面保存了這個學生對應的班級信息List<Student> list = sqlSession.selectList("student.selectStudentBanjiInfo");for (Student student : list) {System.out.println(student);}
}
Student [id=1, name=張三, age=21, gender=男, banji=Banji [id=1, name=java1807]]
Student [id=2, name=zhangsan, age=12, gender=男, banji=Banji [id=1, name=java1807]]
Student [id=4, name=王五2, age=12, gender=男, banji=Banji [id=2, name=java1812]]

二、一對多

三、多對多

多對多其實就是分解為兩個一對多。

四、懶加載(延遲加載)

1.什么是懶加載

顧名思義,懶加載就是懶得加載,只有使用的時候才進行加載。其實,懶加載也加延遲加載,主要以應用與Mybatis的關聯查詢,按照設置的延遲規則,推遲對延遲對關聯對象的select查詢,例如,我們在用Mybatis進行一對多的時候,先查詢出一方,當程序需要多方數據時,mybatis會再次發出sql語句進行查詢, 減輕了對我們數據庫的壓力。Mybatis的延遲加載,只對關聯對象有延遲設置。
MyBatis關聯查詢加載時機
  1. 直接加載:執行完主對象的查詢后,馬上執行對關聯對象的查詢語句
  2. 侵入式延遲:執行完對主對象對查詢后,不會執行對關聯對象的查詢,但當訪問主對象的屬性詳情事,就會執行關聯對象的查詢
  3. 深度延遲:只有當真正訪問關聯對象的詳情時,才會執行查詢語句
延遲加載需要把mybatis版本號改為:3.5.1

2.全局延遲配置

在MyBatis核心配置類中添加標簽

<settings><!-- 延遲加載總開關 --><setting name="lazyLoadingEnabled" value="true"/><!-- 侵入式延遲加載開關 --><setting name="aggressiveLazyLoading" value="true"/>
</settings>

(aggressiveLazyLoading)侵入式延遲加載為true, 在3.4.1之后的版本(aggressiveLazyLoading)侵入式延遲加載默認值為false

StudentMapper.xml

<resultMap id="studentMap" type="Student"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="gender" property="gender"/><result column="banji_id" property="banjiId"/><!--<association property="banji" javaType="Banji"><id column="banjiId" property="id"/><result column="banjiName" property="name"/></association>--><association property="banji" column="banji_id" select="banji.selectById" javaType="Banji"/>
</resultMap><select id="selectAll" resultMap="studentMap">SELECT id, name, age, gender, banji_idFROM student
</select>

BanjiMapper.xml

<select id="selectById" resultType="Banji">SELECT * FROM banji WHERE id=#{id}
</select>
1.直接加載

直接加載:執行完主對象的查詢后,馬上執行對關聯對象的查詢語句

默認情況的延遲加載

<!-- 延遲加載總開關 -->
<setting name="lazyLoadingEnabled" value="false"/>
<!-- 侵入式延遲加載開關 -->
<setting name="aggressiveLazyLoading" value="true"/>

延遲加載的默認設置是直接加載

延遲加載默認情況下是關閉狀態(false),延遲加載相當于總閘,總閘是關閉的那么侵入式延遲加載即使是true也不會起作用。

2.侵入式延遲加載

侵入式延遲:執行完對主對象對查詢后,不會執行對關聯對象的查詢,但當訪問主對象的屬性詳情時,就會執行關聯對象的查詢

<!-- 延遲加載總開關 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 侵入式延遲加載開關 -->
<setting name="aggressiveLazyLoading" value="true"/>
@Test
public void testSelectAll() throws IOException {SqlSession sqlSession = MyBatisUtils.getSqlSession();List<Student> list = sqlSession.selectList("student.selectAll");for (Student student : list) {//System.out.println(student);//student.getName();}
}

@Test
public void testSelectAll() throws IOException {SqlSession sqlSession = MyBatisUtils.getSqlSession();List<Student> list = sqlSession.selectList("student.selectAll");for (Student student : list) {//System.out.println(student);student.getName();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897897.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大語言模型學習及復習筆記(1)語言模型的發展歷程

1.大模型進入人們視野 ChatGPT 于2022年11月底上線 模型名稱 發布時間 核心突破 GPT-3 2020年6月 首款千億參數模型&#xff0c;少樣本學習 GPT-3.5-Turbo 2022年11月 對話能力優化&#xff0c;用戶級應用落地 GPT-4 2023年3月 多模態、強邏輯推理 GPT-4o / GPT-4…

【NLP】 3. Distributional Similarity in NLP(分布式相似性)

Distributional Similarity in NLP&#xff08;分布式相似性&#xff09; 分布式相似性&#xff08;Distributional Similarity&#xff09; 是自然語言處理&#xff08;NLP&#xff09;中的核心概念&#xff0c;基于“相似的單詞出現在相似的上下文中”這一假設。它用于衡量單…

【C#學習】協程等待

來源GPT&#xff0c;僅記錄學習 yield return WaitForEndOfFrame() 適用于 渲染結束后再執行代碼&#xff0c;但 WebGL 可能不適合這個操作&#xff0c;會拖慢幀率。(渲染得太慢&#xff09; yield return null; 讓代碼在下一幀的 Update() 里繼續運行&#xff0c;更加流暢。 …

【項目】負載均衡式在線OJ

負載均衡式在線OJ 目錄 負載均衡式在線OJ 1.項目介紹&#xff1a; 2.comm 2.1 log.hpp 日志等級 開放式日志 時間戳工具 2.2 util.hpp TimeUtil類 PathUtil類 FileUtil類 StringUtil類 3.Compile_server 3.1compile_run.hpp RemoveTempFile CodeToDesc Start 3.…

實現“XXX一張圖“進行環境設施設備可視化管理

實現“電網一張圖”、“鐵路一張圖”、“水庫一張圖”、“森林一張圖”等概念,本質上是將某一領域的空間數據、設施設備、運行狀態等信息整合到一個統一的數字化平臺上,實現全域可視化、智能化管理和協同運營。這種“一張圖”模式依賴于地理信息系統(GIS)、物聯網(IoT)、…

《基於Python的網絡爬蟲抓包技術研究與應用》

## 摘要 本文探討了基于Python的網絡爬蟲抓包技術及其應用。隨著互聯網數據的快速增長&#xff0c;網絡爬蟲技術在數據采集和分析中扮演著越來越重要的角色。本研究首先介紹了網絡爬蟲的基本概念和Python在爬蟲開發中的優勢&#xff0c;然后深入分析了抓包技術的原理和常用工具…

【藍橋杯速成】| 1.暴力解題

1高頻考點與暴力解題_嗶哩嗶哩_bilibili 感謝up主分享&#xff0c;以下內容是學習筆記&#xff0c;以c為主&#xff0c;部分python 題目一&#xff1a;維納的年齡 題目內容 美國數學家維納(N.Wiener)智力早熟&#xff0c; 11歲就上了大學。他曾在1935~1936年應邀來中國清華大…

[C++Qt] 槽函數收不到信號問題(信號的注冊)

&#x1f4e2;博客主頁&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01;&#x1f4e2;本文由 丶布布原創&#xff0c;首發于 CSDN&#xff0c;轉載注明出處&#x1f649;&#x1f4e2;現…

從零開始用AI開發游戲(一)

1. 核心玩法設計 核心目標&#xff1a;玩家需在隨機生成的3D迷宮中尋找出口&#xff0c;躲避陷阱、收集道具、解開謎題。核心機制&#xff1a; 隨機生成迷宮&#xff1a;每次游戲生成不同結構的迷宮&#xff08;遞歸分割算法或深度優先搜索&#xff09;。第一人稱視角&#xf…

基于ssm的寵物醫院信息管理系統(全套)

一、系統架構 前端&#xff1a;html | layui | vue | element-ui 后端&#xff1a;spring | springmvc | mybatis 環境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea | nodejs 二、代碼及數據庫 三、功能介紹 01. web端-首頁1 02. web端-首頁…

【CXX】6.7 SharedPtr<T> — std::shared_ptr<T>

std::shared_ptr 的 Rust 綁定稱為 SharedPtr。 限制&#xff1a; SharedPtr 不支持 T 為不透明的 Rust 類型。對于在語言邊界上傳遞不透明 Rust 類型的所有權&#xff0c;應改用 Box&#xff08;C 中的 rust::Box&#xff09;。 示例 // src/main.rsuse std::ops::Deref; …

利用python生成excel中模板范圍對應的shape文件

利用python生成excel中模板范圍對應的shape文件 # -*- coding: utf-8 -*- import os.pathimport pandas as pd from shapely.geometry import Polygon from shapely.wkt import dumps import argparse# 創建解析器 parser argparse.ArgumentParser(description"這是一個…

cursor使用

引入私有文檔 設置-> Features->下滑找到Docs url后邊多加一個 / 可以拉取url下所有的頁面(子頁面&#xff0c;子目錄)&#xff0c;不加只拉取url當前頁面 使用 選擇 Docs 回車 選擇 文檔 直接解析鏈接 鏈接 回車 搜索引擎 web 對比git版本差異 git 選擇其中一個 g…

達夢數據庫中插入導出圖片的方法與應用

達夢數據庫中插入導出圖片的方法與應用 在數據庫的實際應用場景中&#xff0c;圖片存儲是一項常見且重要的需求。以電商平臺為例&#xff0c;商品展示圖片是吸引消費者的關鍵元素&#xff1b;而在社交軟件里&#xff0c;用戶頭像更是個人形象的直觀體現。針對達夢數據庫&#…

【云原生】動態資源分配(DRA)深度洞察報告

1. DRA 的發展與設計靈感 Kubernetes 早期通過 Device Plugin&#xff08;設備插件&#xff09;機制支持 GPU、NIC 等特殊硬件&#xff0c;將節點上可用設備數量上報給 kubelet 和調度器。但設備插件模式存在局限&#xff1a;調度器只能根據節點標簽等屬性粗粒度篩選&#xff…

嵌入式八股ARM篇

前言 ARM篇主要介紹一下寄存器和中斷機制,至于匯編這一塊…還請大家感興趣自行學習 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函數傳參 R4 - R11用來保存程序運算的中間結果或函數的局部變量 在函數調用過程中 注意在發生異常的時候 cortex-M0架構會自動將R0-R3壓入…

Python 實現的采集諸葛靈簽

Python 實現的采集諸葛靈簽 項目介紹 這是一個基于 Python 開發的諸葛靈簽數據采集和展示項目。通過爬蟲技術獲取諸葛神簽的簽文和解簽內容&#xff0c;并提供數據存儲和查詢功能。 項目結構 zhuge/├── zhuge_scraper.py # 爬蟲主程序├── zhuge_pages/ # 數據存儲目錄…

【C++項目實戰】校園公告搜索引擎:完整實現與優化指南

&#x1f3ac; 個人主頁&#xff1a;誰在夜里看海. &#x1f4d6; 個人專欄&#xff1a;《C系列》《Linux系列》《算法系列》 ?? 道阻且長&#xff0c;行則將至 目錄 &#x1f4da;一、項目概述 &#x1f4d6;1.項目背景 &#x1f4d6;2.主要功能 &#x1f4d6;3.界面展…

代理(Delegate)、閉包(Closure)、Notification(通知中心) 和 swift_event_bus適用場景和工作方式

在 Swift 開發中&#xff0c;在 Swift 開發中&#xff0c;代理&#xff08;Delegate&#xff09;、閉包&#xff08;Closure&#xff09;、Notification&#xff08;通知中心&#xff09; 和 swift_event_bus 主要用于 組件之間的通信&#xff0c;但它們的適用場景和工作方式有…

設計模式--單例模式(Singleton)【Go】

引言 在設計模式中&#xff0c;單例模式&#xff08;Singleton Pattern&#xff09;是一種非常常見且實用的模式。它的核心思想是確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。這種模式在需要全局唯一對象的場景中非常有用&#xff0c;比如配置管理、日志記錄、數…