MyBatisPlus&Plus原理包含分頁總結

2021-02-14 魏凡繽Java技術文章



如果要翻MyBatisPlus的源碼,我們先翻MyBatis的源碼

秉承一張圖勝過百句廢話,下面是源碼的跳轉過程

以下是描述如何獲取SqlSession的過程

以下是MapperProxy動態代理Dao接口過程

以下是執行SQL查詢的過程

那麼整個MyBatis執行總結一下如下



SqlSession:對外的接口

MyBatis的四大接口強行記一下

Executor:內部執行器

StatementHandler:負責處理Mybatis與JDBC之間Statement的交互

ParameterHandler:負責為 PreparedStatement 的 sql 語句參數動態賦值

ResultSetHandler: 就是將ResultSet結果集映射為Bean、List、Map等Java中的對象或者集合


下斷點在org.apache.ibatis.session.Configuration能看到以上提到的四大接口的身影

newParameterHandler、newResultSetHandler、newStatementHandler、newExecutor

敲黑板,MyBatis通過插件的方式完成分頁就靠這裡newExecutor方法找蹤影


====以上簡單回顧一下MyBatis分頁插件====

那麼我們今天的重點是看看MyBatisPlus分頁插件

@MapperScan註解找到

在MapperFactoryBean我們又看到Configuration的身影

那不用廢話了吧,繼續找newExecutor方法看到攔截器,所以說MyBatisPlus果然是MyBatis的增強版,套路是一樣的,MyBatisPlus也是遵循Mybatis設計理念,通過設置註解的方法實現加載動態sql語句而已


====分析到這裡索性把MyBatisPlus執行SQL流程也走一遍====

那其實還是老套路@MapperScan註解進入MapperFactoryBean類

這回進入addMapper方法,這裡MP用了點小手段,不要去找MapperRegistry的addMapper方法,而是走到MybatisMapperRegistry的addMapper方法

parser.parse()進去

下斷點,這裡看到BaseMapper.xxxx的各種方法

再聯想下Dao層繼承的BaseMapper<T>有沒有想起來點什麼??!!



最後面試會問除了分頁插件,還有沒有其他分頁方式

常見的四種分頁方式總結一下

分頁類型優點缺點數組分頁簡單不是物理分頁,性能差Sql分頁真實分頁,性能高冗餘,不是統一管理,維護性差

RowBounds

MyBatis自帶分頁,簡單內存分頁,性能差MyBatis插件

一次編寫,避免多次配置出錯

,需要修改時修改一個文件即可

開發難度大


每日一論:

今天真要說說關於學習編程的第一步,國內雖然不能Google,但是我發現,大部分人真不會百度,是真的不會,我覺得都不是伸手黨,應該叫伸嘴黨,為何?你想啊,他連百度都懶得百度,直接就過來問問題!!!

        看到一篇回帖很精彩內容如下

        所以我用剪貼板固定存了幾個問題的答案,每次看到直接粘貼。當一個人學會用百度的時候,他就不會在這問了——所以問的肯定都不會去百度,說了也是白說。

一些人的問題的處理流程,請大家好好品品

1.對方問我問題,我幫他百度後把答案發給他。

2.對方百度找不到答案再問我,我換個關鍵詞依舊百度找到答案後發給他。

(很多人不懂得如何運用搜尋引擎獲取自己想要的信息)

3.對方在網際網路上找不到有其他人遇到過這個bug,但我剛好之前遇到過,知道怎麼解決。

(基本是同專業的同事問的。)

4.當然還有一種情況,就是對方百度真的找不到答案,而我有谷歌…當然這種情況幾乎沒見過,大部分是直接找我要梯子。




相關焦點

  • Springboot+MybatisPlus高效實現增刪改查
    本文分為以下幾個部分講解:引入Mybatis-Plus依賴代碼生成器配置Mybatis-PlusCURD示例條件構造分頁擴展功能一、引入Mybatis-Plus依賴本文示例使用maven作為依賴管理,在pom.xml文件引入springboot和Mybatis-plus
  • 史上最全的SpringBoot 中引入 MyBatisPlus 的常規流程!
    mybatis-plus就很好的解決了這個問題。mybatis-plus簡介Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。這是官方給的定義,關於mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網。那麼它是怎麼增強的呢?
  • MyBatis-Plus為啥這麼牛?
    :基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同於普通 List 查詢分頁插件支持多種資料庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種資料庫內置性能分析插件:可輸出 Sql
  • Mybatisplus-plus 1.0.0 發布,掃描 Entity 類構建 ResultMap 主鍵...
    MybatisPlus-plus 1.0.0增加了自動填充優化功能 和 自動掃描Entity類構建ResultMap功能。
  • Mybatisplus-plus 1.3.1 發布,新增服務層根據複合主鍵 CRUD 操作
    Mybatisplus-plus 1.3.1新增在service層操作複合主鍵進行增刪改查相關操作的功能。
  • Mybatisplus-plus 1.1.0 發布,xml 中省略包名調用靜態方法並支持...
    mybatis或mybatisplus做連表查詢時,輸入參數往往不是單一的實體類,而是採用更靈活的Map對象,但map中key參數的名稱定義過於隨便
  • Mysql跨庫分頁查詢方案總結
    本文將分析如何解決不同資料庫實例上的數據分頁解決方案。現假設有N個資料庫實例,按照時間time排序,查詢偏移量為X,查詢數據量為Y。全局視野法全局視野法是通過將每一個資料庫實例上的分頁數據查詢到內存中,然後在服務層進行內存排序,得到分頁數據。
  • 乾貨:PHP基礎之分頁原理+分頁代碼+分頁類製作
    '1234abcd') or die('連接資料庫錯誤'.mysql_error());  //2.選擇資料庫  mysql_select_db('empManage');  //3.選擇字符集  mysql_query('set names utf8');  //4.發送sql語句並得到結果進行處理  //4.1分頁
  • Linux 內存尋址之分頁機制
    下面,我們就來看看更加重要和複雜的分頁機制。分頁機制在段機制之後進行,以完成線性—物理地址的轉換過程。段機制把邏輯地址轉換為線性地址,分頁機制進一步把該線性地址再轉換為物理地址。硬體中的分頁分頁機制由CR0中的PG位啟用。如PG=1,啟用分頁機制,並使用本節要描述的機制,把線性地址轉換為物理地址。
  • MySQL 分頁優化中的 「 INNER JOIN方式優化分頁算法 」 到底在什麼情況下會生效?
    ,並沒有非常具體地說明測試場景的情況下,給出了一種經典的方案,因為現實中很多情況都不是固定不變的,能總結出來通用性的做法或者說是規律,是要考慮非常多的場景的,同時,面對能夠達到優化的方式要追究其原因,同樣的做法,換了個場景,達不到優化效果的,還要追究其原因。
  • CodeIgniter 3.x 分頁教程
    這時候你需要寫某種分頁腳本。對於沒有做過分頁的開發者來說還是有一點難度的,但使用 CodeIgniter 卻是輕而易舉就能完成的。CodeIgniter 有一個非常容易使用的分頁類。在本教程中我會做一個從資料庫獲取數據並分頁的簡單例子。我將使用最新版本的 CI,寫這篇文章時的版本是 3.0.4,用最新的穩定版框架總是好的。現在,讓我們開始吧。
  • 分頁功能的分析與設計
    分頁功能減少了低價值請求:以上圖的天貓中筆記本搜索結果頁面為例,每頁60個商品,總頁數76頁,一共4560個商品;若不做分頁功能,用戶的一次搜索請求,就需要一次將4560個商品包含圖片全部加載出來;但實際情況是,用戶真的會把這個4560個商品全部看完嗎?也許他只看了前5頁就確定了購買意向,那這時後面71頁的內容就是白加載了,這其實就是無價值的加載請求。
  • MySQL分頁優化解析
    似乎討論分頁的人很少,難道大家都沉迷於limit m,n?在有索引的情況下,limit m,n速度足夠,可是在複雜條件搜索時,where somthing order by somefield+somefieldmysql會搜遍資料庫,找出「所有」符合條件的記錄,然後取出m,n條記錄。
  • 看我簡單實現局部刷新、分頁
    我們今天就以分頁查詢為例進行講解!!!代碼實現1.後臺的Java代碼我就不再貼出來了,大家可以查看我的上一篇文章,Mybatis-Plus來學習一下!代碼生成、分頁插件?,可以通過mybatis-plus進行分頁或者是使用mybatis的分頁插件也可以,無論如何使用什麼技術,相信實現分頁對大家來說不是什麼難事!!!
  • Django分頁完整示例
    Django具有內置的分頁類,可管理分頁數據。所有分頁方法都使用Paginator類。它實際上是承擔將QuerySet拆分為Page對象的工作。在django中可以使用兩種方法進行分頁,第一種方法是使用基於函數的視圖,第二種方法是使用基於類的視圖。現在,首先,需要使用此命令創建一個新的django項目。
  • 記一次SQL Server的分頁優化兼談談使用Row_Number()分頁存在的問題
    用ROW_NUMBER()進行分頁我們看看現場抓上來的分頁語句:select top 20 a.,原理是:先查出pageSize*(pageIndex-1)(T1)的記錄數,然後再Top出PageSize條不在T1中的記錄,就是當前頁的記錄。
  • PHP中的數組分頁實現(非資料庫)
    PHP中的數組分頁實現(非資料庫)在日常開發的業務環境中,我們一般都會使用 MySQL 語句來實現分頁的功能。但是,往往也有些數據並不多,或者只是獲取 PHP 中定義的一些數組數據時需要分頁的功能。這時,我們其實不需要每次都去查詢資料庫,可以在一次查詢中把所有的數據取出來,然後在 PHP 的代碼層面進行分頁功能的實現。
  • 小說精品屋 - plus v2.9.0 發布,原創文學 CMS 系統
    小說精品屋-plus v2.9.0發布了,主要改進包括:更新
  • Vue 3下element-ui用不了怎麼辦,element-plus來幫你
    element-plus你可以理解為是element-ui支持Vue 3的版本,element-plus是一套支持Vue 3.0的組件庫,提供的組件涵蓋了絕大部分頁面UI的需求。在Vue 3的腳手架項目中,首先安裝element-plus的npm包,命令如下所示:npm install element-plus -S編輯main.js,引入整個element-plus組件和所需的樣式,由於element-plus組件內部默認使用英語,而我們項目需要使用中文
  • Word怎麼添加及取消分頁
    word中怎麼分頁?Word2007 插入--分頁Word2003 插入--分隔符Ctrl+enter設置分頁?你想怎麼分?你設置好頁面的各項值,系統根據你的實際使用情況,默認的是自動分頁的!一、調整Word自動分頁時的屬性儘管Word會根據頁面大小及有關段落的設置自動對文檔進行分頁,但我們仍然可以對Word自動分頁時的有關禁忌規則進行適當的修改,以達到控制Word的自動分頁狀態的目的。調整Word自動分頁屬性的步驟為:1、選定需調整分頁狀態的段落。