Mybatis源碼剖析---第二講

Mybatis源碼剖析—第二講

那我們在講完了mappedstatement這個類,它的一個核心作用之后呢?那下面我有一個問題想問問各位。作為mappedstatement來講,它封裝的是一個select標簽或者insert標簽。但是呢,我們需要大家注意的是什么?在我們開發的過程當中啊,這些我們所寫的。select標簽也好,還有insert標簽兒,update標簽兒delay的標簽也罷,那么除了它標簽兒上的這些內容之外。實際上,我們說它還有一個很重要的東西,
這個東西是什么呢?sql語句。哎,不管是insert標簽當中的這個insert into的這條sql,還是我們所說的查詢當中的這些select的sqk?那你會發現,作為這些標簽,里面是不是都有這個SQL的封裝啊?那么,作為這個sql的封裝?它在mybatis源碼當中是以什么形式來體現的呢?那首先我們大家可以確定的是什么呀?就是一切皆對象,什么最終都會被封裝成對象的形式,

在這里插入圖片描述
在這里插入圖片描述
SQL語句,它一定是string類型的,但是它并沒有。僅僅用一個string單獨代表這個sql,而是把這個sql怎么著封裝在了這個類里。那當然,我們說與sql相關的還有什么?那顯然還有它的相關的參數。因為我們知道后續我們在寫sql的時候,它一定不是簡單的說select from, 它一定會帶上相關參數,將這些統一封裝成BoundSql類 從屬于Mappedstatement, 這個秉承著責任單一,各司其職的面向對象的設計方式
就目前理解而言 : SqlSession封裝JDBC,操作MappedStatement,其實并非這樣

在這里插入圖片描述
操作里包含了,查和改,改包括了增,刪,改,還有處理緩存,這些操作由Executor實現,為什么設計成接口呢,根據設計原則來說,操作相關的類型都要設計成接口
在這里插入圖片描述
它的設計也是這樣,查看子類快捷鍵 ctrl + alt + B ,我們回到Executor類,

在這里插入圖片描述
這個BaseExecute實際上是這個Execute的一個適配器,實現了一些基本功能,這三個才是最核心的
在這里插入圖片描述

操作類對象 (SqlSession) ---> 門面 ExcutorExcutor 是Mybatis中處理功能的核心1. 增刪改update  查query2. 事務操作 提交 回滾3. 緩存相關的操作Excutor接口 (適配器模式) 操作相關都要設計成接口BatchExcutorJDBC中批處理的操作, BatchExcutor ReuseExcutor目的:復用 Statement (需要sql一樣)insert into t_user(ID,name)values(1,‘name1’);insert into t_user(ID,name)values(2,‘name2’);SimpleExcutor常用Excutor Mybatis推薦 默認 Configuration protected ExecutorType defaultExecutorType = ExecutorType.SIMPLE;

在這里插入圖片描述
為什么需要批處理呢,因為每次connect連接操作系統都會消耗資源
在這里插入圖片描述
現在我們知道了,executor是完成操作的。但其實真正完成數據庫操作的是statementhandler。那為什么不能把這個executor給省略了,直接用statementhandler呢?還是我們所說的。單一職責的問題
executor他做了三件事。第一件事是增刪改。也就是與數據庫的。操作那除此之外,它是不是還有事物的控制?它是不是還有緩存的操作 所以實際上executor他做的是三件最主要的工作。那后續它之所以在這樣的封裝的原因是它把其中的第一部分操作。由statementhandler來進行工作。

在這里插入圖片描述

采用了適配器模式StatmentHandlerStatementHandler是Mybatis封裝了JDBC Statement,真正Mybatis進行數據庫訪問操作的核心功能:增刪改差StatementHandler接口SimpleStatementHandlerJDBC 操作 PreparedStatementHandlerCallableStatementHandler ParameterHandler目的:Mybatis參數 ---》 JDBC 相關的參數 @Param ---> #{} --- > ?ResultSetHandler目的:對JDBC中查詢結果集 ResultSet 進行封裝 TypeHandlerJava程序操作 數據庫Java類型   數據庫類型String    varcharint       numberint       int excutor和statementhandler都用到了適配器模式

至此,我們總結一下

executor就是SqlSesson的一種實現,一種執行
在這里插入圖片描述
跳到實現類中
在這里插入圖片描述
然后executor可以進行對數據庫進行操作,對緩存進行處理,對事務進行操作,具體對數據庫的操作由statementhandler來做,通過parameterhandler進行參數處理,resultsethandler進行數據庫的返回,相關類型由typehandler來進行控制,statementhandler封裝了statement,resultsethandler封裝了resuletset,至此我們流程就通了
在這里插入圖片描述
點進去
在這里插入圖片描述
跳到實現類
在這里插入圖片描述
在這里插入圖片描述
進行重載
在這里插入圖片描述
在這里插入圖片描述
交給executor進行執行,點擊update方法繼續往下深入
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

至此我們這個流程算是完成了,和我們的結論一一印證了
在這里插入圖片描述
我們為什么說第一種是代理設計模式呢,因為 UserDAO userDAO = sqlSession.getMapper(UserDAO.class); 我們并沒有創建接口的實現類,但userDAO的確是一個子類,讓我們瞧瞧
在這里插入圖片描述
這個動態代理如何實現的呢,我們下一節來講解

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

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

相關文章

社交媒體數據恢復:soma messenger

步驟1:檢查備份文件 首先,我們需要確認您是否已開啟Soma Messenger的自動備份功能。若已開啟,您可以在備份文件中找到丟失的數據。 步驟2:清除緩存并重啟應用 有時候,清除Soma Messenger的緩存文件可以幫助恢復丟失的…

為什么股票市場里有認賊為父的現象?

文章大綱:(本文2648字,完整版本應該3500以上,耗時一個鐘) 1、前言:邏輯與博弈 2、直覺引入博弈焦點 3、上周4-5的市場博弈視角 4、下周一視角能看到的東西 5、視角背后看到的情緒周期市場共識下的博弈…

請說說 Java中 static 修飾符是干啥的?

好的,面試官. static英文含義是靜態的,也就是在修飾成員(對象,方法,代碼塊,變量)時,表明他們都是屬于靜態成員 其次被修飾的成員有幾大特性: 1.一個被static修飾的靜態成員不再屬于實例出來的對象,而是只屬于這個類自己. 2.訪問static修飾的成員要通過類名訪問,在類加載時初…

特殊變量筆記

執行demo4.sh文件,輸入輸出參數itcast itheima的2個輸入參數, 觀察效果 特殊變量:$# 語法 $#含義 獲取所有輸入參數的個數 案例需求 在demo4.sh中輸出輸入參數個數 演示 編輯demo4.sh, 輸出輸入參數個數 執行demo4.sh傳入參數itcast, itheima, 播仔 看效果…

銷量翻倍不是夢!亞馬遜速賣通自養號測評實戰技巧分享!

在亞馬遜、速賣通這些跨境電商平臺上,賣家們都在想各種辦法讓自己的產品賣得更好。現在,有一種叫做“自養號測評”的方法特別火。簡單來說,就是自己養一些買家賬號,然后讓這些賬號來給你的產品寫好評。這樣,你的產品就…

Java的反射機制以及使用場景

Java的反射機制以及使用場景 什么是反射Class對象如何使用獲取 Class 類對象反射創造對象反射獲取類的構造器反射獲取類的成員變量反射獲取類的方法 反射的應用場景JDBC 的數據庫的連接Spring 框架的使用 什么是反射 Oracle 官方對反射的解釋 Reflection is commonly used by p…

從零自制docker-14-【實現 mydocker commit 打包容器成鏡像】

文章目錄 目標注意exec.Commandtar代碼結果 目標 piveroot切換工作目錄到/merged后,通過docker commit將此時工作目錄的文件系統保存下來,使用tar包將該文件系統打包為tar文件 命令類似 ./mydocker commit myimage然后當前目錄下會得到myimage.tar 注意…

「實用推薦」如何為桌面 移動跨平臺應用選擇UI框架/APP架構?

DevExpress .NET MAUI UI組件庫提供了用于Android和iOS移動開發的高性能UI組件,該庫包括數據網格、圖表、日程、數據編輯器、CollectionView和選項卡組件。 獲取DevExpress .NET MAUI最新正式版下載(Q技術交流:532598169) “一次編寫&#…

ABB機器人---基礎編程

目錄 第一章 代碼解釋 1.1 基礎代碼 1.1.2 關于 VAR robtarget pos 1.1.3 關于四元數 1.2 機器人初始化程序 1.3 配置通信 (ProfiNet 示例,ABB RAPID) 1.4 設置干涉區 (ABB RAPID) 1.5 示教軌跡和自動過程 (ABB RAPID) 1.6 配置抓手并進行抓取操作 (ABB RA…

springboot錯誤

錯誤總結 1、使用IDEA 的 initialalzer顯示2、IDEA 新建文件 沒有 java class3、java: 錯誤: 不支持發行版本 22解決方法4、IDEA-SpringBoot項目yml配置文件不自動提示解決辦法 1、使用IDEA 的 initialalzer顯示 IDEA創建SpringBoot項目時出現:Initialization fail…

公認最好用的隨身wifi品牌推薦!歐本VS閃魚VS格行隨身wifi哪款更好用?歐本隨身wifi靠譜嗎?

最近小編后臺私信快被問爆了,都想讓測評一下自己相中的隨身wifi到底行不行。該說不說隨身wifi品牌真是越來越多了,今天就挑選咨詢量最多的三款:格行,歐本,閃魚!咱們各方面都實測一下,看看哪款更…

基于ucos-ii操作系統的生產者消費者-問題

目 錄 第1章 題目分析. 1 1.1 生產者線程... 1 1.2 消費者線程... 1 1.3 緩沖區... 1 1.4 進程的同步與互斥... 1 第2章 解決方案. 2 2.1 總體方案... 2 2.2 生產者問題... 2 2.3 消費者問題... 3 2.4 進程問題... 5 第3章 實驗結果. 6 3.1 運行結果... 6 3.2 結果分析... 8 第…

提取 Chrome、Firefox 中儲存的用戶密碼用于憑據發現

操作環境 Chrome 瀏覽器 Version 125.0.6422.112 (Official Build) (64-bit)Firefox 瀏覽器 Version 126.0 (64 位) Chrome 瀏覽器儲存密鑰原理 新的 Chrome 瀏覽器儲存密碼的方案是使用 Chrome 生成的 AES 密鑰對用戶密碼進行加密之后儲存在 Sqlite 數據庫文件中,A…

Qt資源系統用法筆記 qrc

目錄 創建和使用.qrc文件的步驟: 步驟1: 創建.qrc文件 步驟2: 編輯.qrc文件 步驟3: 在代碼中使用資源 步驟4: 編譯和運行 優點和注意事項 c調用: Qt資源系統(Qt Resource System)提供了一種將應用程序所需的文件&#xff0…

Linux 內核之 mmap 內存映射的原理及源碼解析

文章目錄 前言一、簡介1. mmap 是什么?2. Linux 進程虛擬內存空間 二、mmap 內存映射1. mmap 內存映射的實現過程2. mmap 內存映射流程2.1 mmap 系統調用函數2.2 ksys_mmap_pgoff 函數2.3 vm_mmap_pgoff 函數2.4 do_mmap_pgoff 函數2.5 do_mmap 函數2.6 get_unmappe…

私域流量的真諦:構建并運營屬于你自己的私域生態

大家好,我是來自一家專注于私域電商行業的軟件開發公司的產品經理,擁有超過七年的行業經驗。今天,我想和大家聊聊私域流量的真正含義,以及為何我們應該關注并努力打造屬于自己的私域生態。 什么是私域流量? 私域流量&…

HCIA第二天復習上

延長傳輸距離-------中繼器(放大器)------物理層設備 可以延長5倍傳輸距離 增加網絡節點數量 網絡拓撲結構 1直線型拓撲 信息安全性差 網絡延遲高傳輸速度慢 2環形拓撲 3星型拓撲 4網狀型拓撲 傳輸效率高,…

【字典樹 馬拉車算法】336. 回文對

本文涉及知識點 字典樹 馬拉車算法 336. 回文對 給定一個由唯一字符串構成的 0 索引 數組 words 。 回文對 是一對整數 (i, j) &#xff0c;滿足以下條件&#xff1a; 0 < i, j < words.length&#xff0c;i ! j &#xff0c;并且words[i] words[j]&#xff08;兩個字…

通過注意力調節實現更好的文本到圖像生成對齊

近年來&#xff0c;生成性AI技術在眾多領域取得了前所未有的進步。大規模預訓練模型的出現激發了各種下游任務中的新應用。這在文本到圖像生成領域尤為明顯&#xff0c;例如Stable Diffusion、DALL-E 2和Imagen等模型已經顯著展示了它們的能力。盡管如此&#xff0c;復雜提示中…

appium篇-windows桌面自動化(一)[環境配置]

1、windows版本&#xff1a;win10 2、winSdk版本 Windows SDK and emulator archive | Microsoft Developer 3、winAppDriver版本 1.2.99 Releases microsoft/WinAppDriver (github.com) ################ 4、python版本 Python 3.9.13 ############### 5、appium版本 Re…