第十六天,7月10日,八股

1、mybatis的延遲加載

需要時才加載關聯對象,而不是查詢主對象時,立刻加載所有關聯對象,這樣可以提高查詢性能并減少不必要的數據庫訪問,例如:一個訂單表包含著商品列表(一對多),當查詢訂單對象時,不會立刻從數據庫加載商品列表,而是等到第一次真正使用到商品時采取查詢數據庫

一般一對多,多對多的場景適用延遲加載,如何開啟?

(1)局部開啟:在<collection ... fetchType="lazy">

??(2)全局開啟:

mybatis.configuration.lazy-loading-enable=true? #開啟全局懶加載

mybatis.configuration.aggressiv-lazy-loading=false #關閉立即加載

注意:mybatis的核心在于使用動態代理技術

1、在查詢主對象時,MyBatis 并不會直接創建關聯對象或集合的實例。

2、而是會為這些關聯屬性或集合創建一個?代理對象,

3、當用戶代碼首次訪問這個代理對象的屬性或方法時,

4、代理對象會攔截這次調用,代理對象內部會檢查關聯數據是否已經被加載,

5、如果數據尚未加載,代理對象會根據 ResultMap 中 association 或 collection 標簽的 select 屬性指定的 Mapper 方法和 column 屬性提供的參數,發起一個新的數據庫查詢。

6、查詢結果(關聯數據)會被加載到代理對象中。

7、代理對象將加載的數據返回給用戶。后續對該代理對象的訪問將直接返回已加載的數據,不再觸發數據庫查詢(在同一個 SqlSession 生命周期內)

2、談談mybatis插件的原理

MyBatis 插件用于攔截 SQL 執行并增強其功能。插件基于 JDK 動態代理機制,在 MyBatis 初始化過程中為指定對象生成代理對象,當攔截對象執行某個方法時,代理會先執行插件中的邏輯,再執行原有邏輯.

? (1)插件類需要實現mybatis的interceptor接口,還需要通過注解標注該插件的攔截點

(2)攔截點就是指插件所能攔截的方法,mybtias允許攔截的方法如下:

【1】Executor:執行器的方法(有update(包含了update,insert,delete),query,commit,rollback,close等)

【2】statementHandler:查操作,增刪改操作,設置參數,sql的預編譯,批處理

【3】ParameterHandler: 獲取參數和設置參數

【4】ResultSetHandler:結果的組裝

3、如何獲取mybatis中自增的主鍵

在平時開發中,可能會遇到數據庫主鍵是自增的情況,這時我們保存數據時并不需要指定主鍵,可是很多時候都需要獲取保存數據后生成的主鍵,怎么辦呢?

1、在mapper.xml中的insert標簽使用useGeneratedKeys="true" keyProPerty="id" keyColumn="id"

  • useGeneratedKeys:是否自動生成主鍵,默認false。
  • keyColumn:數據庫中的自增主鍵的列名,默認是數據庫表的第一列,當主鍵列不是表中的第一列的時候需要設置。
  • keyProperty:返回的主鍵值賦給實體類中哪個屬性。

2、在insert中嵌套使用selectKey標簽

	<insert id="insertBook" parameterType="com.learn.entity.Book"><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO BOOK(NAME) VALUES(#{name})</insert>

4、不同的Mapper中的id是否可以相同

可以相同,每一個映射文件的namespace都會設置對應的mapper接口的全類路徑名稱,也就是保證了每個一個mapper文件的namespace都是唯一的,只需要滿足同一個映射文件的id是不同即可

5、myabtis中屬性名和字段名不一致怎么辦?

(1)在sql語句中通過別名來映射到java的屬性

(2)通過resultMap配置映射關系

(3)如果是因為下劃線轉換為駝峰命名造成的不一致:mapUnderscoreToCamelCase

6、談談你對mybatis中的Executor理解

在MyBatis中,執行器(Executor)是核心組件之一,負責SQL語句的生成和查詢緩存的維護。

Executor的類型有三個

  • SIMPLE:? 默認 SimpleExecutor,每次操作都是一個新的Statement對象
  • REUSE : ReuseExecutor,會根據SQL緩存Statement對象,實現Statement對象的復用,樣可以減少數據庫的準備和創建Statement的開銷
  • BATCH: BatchExecutor 批處理,將所有的修改操作,直到調用flushStatements()方法時才一次性發送到數據庫執行。這種方式可以減少網絡往返次數,提高批量操作的效率。

7、如何設置mybatis中的Executor的類型

(1)可以通過SqlSessionFactory的openSession添加Executor參數

(2)配置文件mybatis.executor-type=batch

8、Mybatis中如何實現多個傳參

(1)使用@param? ??

public User selectUser(@Param("userName") String name, @Param("deptId") int deptId);<select id="selectUser" resultMap="UserResultMap">
select * from user
where user_name = #{userName} and dept_id = #{deptId}
</select>

(2)使用Map

public User selectUser(Map<String, Object> params);<select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">
select * from user
where user_name = #{userName} and dept_id = #{deptId}
</select>

(3)使用java bean

public User selectUser(User user);<select id="selectUser" parameterType="com.test.User" resultMap="UserResultMap">
select * from user
where user_name = #{userName} and dept_id = #{deptId}
</select>

(4)基于參數順序傳參

public User selectUser(String name, int deptId);<select id="selectUser" resultMap="UserResultMap">
select * from user
where user_name = #{0} and dept_id = #{1}
</select>

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

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

相關文章

CSS中的Element語法

1.1 Element語法1.1.1 案例 1. 快速生成10個div,并且每個div里面是從1到10的內容2.生成一個div標簽&#xff0c;類名為one,并且同時生成一個id為first的p標簽1.1.2 快速生成CSS樣式語法 CSS基本采取簡寫形式即可 比如w22 按住tab鍵 可以生成 width:200px比如lh26px 按住tab鍵 可…

Go從入門到精通(21) - 一個簡單web項目-添加swagger文檔

Go從入門到精通(20)-一個簡單web項目-服務搭建 文章目錄Go從入門到精通(20)-一個簡單web項目-服務搭建前言前期準備為API 添加 Swagger 文檔1.安裝依賴2.添加 Swagger 注釋main.goapp.goapi.gopublic_handler.goauth_handler.gocommon_constant.gocommon_dto.gotoken_utils.go3…

自動駕駛環境感知:天氣數據采集與融合技術實戰

天氣與我們日常各類生活場景密不可分&#xff0c;在駕駛場景里當車主發動汽車準備駛向目的地時&#xff0c;窗外的陰晴或許只是直觀感受&#xff0c;而真正影響駕駛安全與行程效率的&#xff0c;可能是幾公里外的突發暴雨、橋面的結冰預警&#xff0c;或是前方路段的強側風等級…

基于svga+uniapp的微信小程序動畫組件開發指南

lottie動畫指南 效果 概述 本項目使用 svgaplayer.weapp.js 庫來實現 SVGA 動畫播放功能&#xff0c;支持在微信小程序、H5 等多端環境下播放高質量的矢量動畫。SVGA 是一種跨平臺的開源動畫格式&#xff0c;具有文件小、渲染性能高的特點。 技術棧 核心庫: svgaplayer.wea…

數據結構與算法——計算直線的交點數

前言&#xff1a; 這是之前做的一道筆試題&#xff0c;當時沒寫出來煩惱很久&#xff0c;這次記錄一下。 題目鏈接&#xff1a; Dotcpp--題目 1174: 計算直線的交點數 參考文章&#xff1a; CSDN--槐陽7--計算直線的交點數 題目&#xff1a; 解題思考&#xff1a; 在當時…

大模型及agent開發6 OpenAI Assistant API 高階應用 - 流式輸出功能

1.Assistant API 的主要優點&#xff1a; 減少編碼工作量、自動管理上下文窗口、安全的訪問控制、工具和文檔的輕松集成 本節講應用設計和性能流式輸出&#xff1a;借助流式輸出&#xff0c;可以讓應用程序實時處理和響應用戶輸入。具體來說&#xff0c;這種技術允許數據在生成…

React Native安卓劉海屏適配終極方案:僅需修改 AndroidManifest.xml!

&#x1f4cc; 問題背景在 React Native 開發中&#xff0c;我們經常會遇到安卓設備劉海屏&#xff08;Notch&#xff09;適配問題。即使正確使用了 react-native-safe-area-context 和 react-navigation&#xff0c;在一些安卓設備&#xff08;如小米、華為、OPPO 等&#xff…

Spring Boot整合MyBatis+MySQL實戰指南(Java 1.8 + 單元測試)

一、環境準備 開發工具&#xff1a;IntelliJ IDEA 2023.1 JDK 1.8.0_382 Maven3.6.3數據庫&#xff1a;MySQL 8.0.21依賴版本&#xff1a;<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifact…

游戲開發日記

如何用數據表來儲存&#xff0c;位置坐標&#xff08;XYZ&#xff09;&#xff1a;決定了對象在世界中的擺放資源ID / 圖片URL&#xff1a;決定了使用什么模型或貼圖事件ID / 特效&#xff1a;是否觸發某些事件&#xff08;例如點擊、交互&#xff09;邏輯索引&#xff08;Grid…

如何使用xmind編寫測試用例

如何使用xmind編寫測試用例為什么要使用xmind&#xff1f;使用xmind編寫測試用例是為了梳理我們的思路。使用xmind編寫測試用例的思路是什么&#xff1f;先進行分析再提取測試用例。 例如下面的注冊功能的測試用例的分析&#xff1a; 分析&#xff1a; 先提取出需要測試的功能點…

使用LLaMA-Factory微調Qwen2.5-VL-3B 的目標檢測任務-數據集格式轉換(voc 轉 ShareGPT)

一、LLaMA-Factory Qwen2.5-VL ShareGPT 格式要求ShareGPT 格式就是多輪對話的 list&#xff0c;每條數據如下&#xff1a;[{"conversations": [{"from": "user", "value": "<image>\n請標注圖片中的所有目標及其類別和位…

【SkyWalking】服務端部署與微服務無侵入接入實戰指南

【SkyWalking】服務端部署與微服務無侵入接入實戰指南 &#x1f4a1; SkyWalking 系列總引導 在微服務架構快速演進的今天&#xff0c;如何有效實現服務鏈路追蹤、性能分析、日志采集與自動化告警&#xff0c;成為系統穩定性的關鍵保障手段。 SkyWalking&#xff0c;作為 Apa…

LVDS系列20:Xilinx 7系ISERDESE2原語(一)

Xilinx 7系FPGA bank的io單元如下&#xff1a;Hr bank比hp bank少odelaye2組件&#xff0c;兩者的idelaye2組件后面&#xff0c;都有iserdese2組件&#xff1b; iserdese2組件是一種專用的串并轉換器或稱解串器&#xff0c;用于高速源同步應用&#xff0c;如大部分LVDS信號解析…

【U-Boot】Shell指令

目錄 U-Boot 三個Shell U-Boot Shell Linux Shell shell腳本 總結 U-Boot Shell命令 幫助命令 部分命令分類與功能說明 一、基礎操作與信息查詢 二、內存操作 三、啟動管理 四、文件系統操作 五、設備與分區管理 六、環境變量 七、診斷與調試 八、特殊功能 九…

《Revisiting Generative Replay for Class Incremental Object Detection》閱讀筆記

摘要Abstract部分 原文 Generative replay has gained significant attention in class-incremental learning; however, its application to Class Incremental Object Detection (CIOD) remains limited due to the challenges in generating complex images with precise …

Mysql: Bin log原理以及三種格式

目錄 一、什么是 Binlog&#xff1f; 二、Binlog 的應用場景與案例 1. 數據恢復 (Point-in-Time Recovery) 2. 主從復制 (Master-Slave Replication) 3. 數據審計 三、Binlog 的三種格式 1. STATEMENT 模式 (Statement-Based Logging - SBL) 2. ROW 模式 (Row-Based Log…

LiteHub之文件下載與視頻播放

文件下載 前端請求 箭頭函數 //這個箭頭函數可以形象理解為&#xff0c;x流入&#xff08;>&#xff09;x*x, //自然而然>前面的就是傳入參數,>表示函數體 x > x * x//相當于 function (x) {return x * x; }//如果參數不是一個&#xff0c;就需要用括號()括起來…

QT5使用cmakelists引入Qt5Xlsx庫并使用

1、首先需要已經有了Qt5Xlsx的頭文件和庫&#xff0c;并拷貝到程序exe路徑下&#xff08;以xxx.exe/3rdparty/qtxlsx路徑為例&#xff0c;Qt5Xlsx版本為0.3.0&#xff09;&#xff1b; 2、cmakelist中&#xff1a; # 設置 QtXlsx 路徑 set(QTXLSX_ROOT_DIR ${CMAKE_CURRENT_SOU…

醋酸鐠:閃亮的稀土寶藏,掀開科技應用新篇章

一、什么是醋酸鐠醋酸鐠是一種鐠的有機鹽&#xff0c;鐠是稀土金屬元素之一。作為一種重要的稀土化合物&#xff0c;醋酸鐠通常以水合物的形式存在&#xff0c;呈現淡黃色或無色結晶。鐠元素本身因其獨特的物理化學特性&#xff0c;在工業和科技領域有著廣泛應用&#xff0c;而…

深入解析JVM內存結構與垃圾回收機制

java是強類型高級語言JVM&#xff08;Java Virtual Machine&#xff0c;Java虛擬機&#xff09;是Java平臺的核心組件&#xff0c;它是一個虛擬的計算機&#xff0c;能夠執行Java字節碼&#xff08;bytecode&#xff09;。1、區域劃分JVM對Java內存的管理也是分區分塊進行&…