【第28章】MyBatis-Plus之插件主體

文章目錄

  • 前言
  • 一、MybatisPlusInterceptor 概覽
    • 1. 屬性
    • 2. InnerInterceptor 接口
  • 二、使用示例
    • 1.Spring 配置
    • 2.Spring Boot 配置
    • 3 .mybatis-config.xml 配置
  • 三、攔截忽略注解 @InterceptorIgnore
  • 四、手動設置攔截器忽略執行策略
  • 五、本地緩存 SQL 解析
  • 總結


前言

MyBatis-Plus 提供了一系列強大的插件來增強 MyBatis 的功能,這些插件通過 MybatisPlusInterceptor 來實現對 MyBatis 執行過程的攔截和增強。以下是這些插件的詳細介紹和使用方法。

注意
版本要求:3.4.0 版本以上


一、MybatisPlusInterceptor 概覽

MybatisPlusInterceptorMyBatis-Plus 的核心插件,它代理了 MyBatisExecutor#queryExecutor#updateStatementHandler#prepare 方法,允許在這些方法執行前后插入自定義邏輯。

1. 屬性

MybatisPlusInterceptor 有一個關鍵屬性 interceptors,它是一個 List<InnerInterceptor> 類型的集合,用于存儲所有要應用的內部攔截器。

2. InnerInterceptor 接口

所有 MyBatis-Plus 提供的插件都實現了 InnerInterceptor 接口,這個接口定義了插件的基本行為。目前,MyBatis-Plus 提供了以下插件:

  • 自動分頁: PaginationInnerInterceptor
  • 多租戶: TenantLineInnerInterceptor
  • 動態表名: DynamicTableNameInnerInterceptor
  • 樂觀鎖: OptimisticLockerInnerInterceptor
  • SQL 性能規范: IllegalSQLInnerInterceptor
  • 防止全表更新與刪除: BlockAttackInnerInterceptor

注意
使用多個插件時,需要注意它們的順序。建議的順序是:

  1. 多租戶、動態表名
  2. 分頁、樂觀鎖
  3. SQL 性能規范、防止全表更新與刪除

    總結:對 SQL 進行單次改造的插件應優先放入,不對 SQL 進行改造的插件最后放入。

二、使用示例

1.Spring 配置

在 Spring 配置中,你需要創建 MybatisPlusInterceptor 的實例,并將它添加到 MyBatis 的插件列表中。以下是一個分頁插件的配置示例:

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><!-- 其他屬性 略 --><property name="configuration" ref="configuration"/><property name="plugins"><array><ref bean="mybatisPlusInterceptor"/></array></property>
</bean><bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="interceptors"><list><ref bean="paginationInnerInterceptor"/></list></property>
</bean><bean id="paginationInnerInterceptor" class="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor"><!-- 對于單一數據庫類型來說,都建議配置該值,避免每次分頁都去抓取數據庫類型 --><constructor-arg name="dbType" value="H2"/>
</bean>

2.Spring Boot 配置

在 Spring Boot 項目中,你可以通過 Java 配置來添加插件:

@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {/*** 添加分頁插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));return interceptor;}
}

3 .mybatis-config.xml 配置

如果你使用的是 XML 配置,可以在 mybatis-config.xml 中添加插件:

<plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="@page" value="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor"/><property name="page:dbType" value="h2"/></plugin>
</plugins>

三、攔截忽略注解 @InterceptorIgnore

@InterceptorIgnore 注解可以用來忽略某些插件的攔截。該注解有多個屬性,分別對應不同的插件。如果某個屬性沒有值,則默認為 false,表示不忽略該插件;如果設置為 true,則忽略對應的插件。

四、手動設置攔截器忽略執行策略

3.5.3 版本開始,你可以手動設置攔截器的忽略執行策略,這比注解更加靈活。但是,你需要手動關閉調用方法。

// 設置忽略租戶插件
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());// 執行邏輯 ..// 關閉忽略策略
InterceptorIgnoreHelper.clearIgnoreStrategy();

五、本地緩存 SQL 解析

MyBatis-Plus 支持本地緩存 SQL 解析,這對于分頁、租戶等插件特別有效。你可以通過靜態代碼塊來設置緩存處理類:

static {// 默認支持序列化 FstSerialCaffeineJsqlParseCache,JdkSerialCaffeineJsqlParseCacheJsqlParserGlobal.setJsqlParseCache(new JdkSerialCaffeineJsqlParseCache((cache) -> cache.maximumSize(1024).expireAfterWrite(5, TimeUnit.SECONDS)));
}

總結

回到頂部

以上是 MyBatis-Plus 插件主體的詳細介紹和使用方法。通過這些插件,你可以大大增強 MyBatis 的功能,提高開發效率。

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

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

相關文章

android 固定圖片大小

在Android中&#xff0c;固定圖片大小可以通過多種方法實現&#xff0c;這些方法主要涉及到ImageView控件的使用、Bitmap類的操作&#xff0c;以及第三方庫&#xff08;如Glide&#xff09;的輔助。以下是幾種常見的方法&#xff1a; 1. 使用ImageView控件 在Android的布局文…

利用docker容器安裝node,使用vue的開發環境

目錄 vue-app ├── docker-data │ ├── site │ ├── app ├── docker-compose.yaml └── deploy.sh docker-compose.yaml yaml文件執行 version: 3.8services:node:image: node:latestcontainer_name: vue-appports:- "8080:8080" # 宿主8080映射容器8…

系統服務綜合項目

要求&#xff1a; 現有主機 node01 和 node02&#xff0c;完成如下需求&#xff1a; 1、在 node01 主機上提供 DNS 和 WEB 服務 2、dns 服務提供本實驗所有主機名解析 3、web服務提供 www.rhce.com 虛擬主機 4、該虛擬主機的documentroot目錄在 /nfs/rhce 目錄 5、該目錄由 no…

如何保證語音芯片的穩定性能和延長使用壽命

要讓語音芯片保持穩定性能&#xff0c;首先需要深入理解其工作原理和內部構造。語音芯片&#xff0c;作為現代電子設備中的核心組件之一&#xff0c;承載著聲音信號的處理與輸出功能。為了確保其穩定運行&#xff0c;我們需要從多個方面進行細致的考慮和操作。? 1、避免長期高…

Windows系統MySQL的安裝,客戶端工具Navicat的安裝

下載mysql安裝包&#xff0c;可以去官網下載&#xff1a;www.mysql.com。點擊downloads 什么&#xff1f;后面還有福利&#xff1f; 下載MySQL 下載企業版&#xff1a; 下載Windows版 5點多的版本有點低&#xff0c;下載8.0.38版本的。Window系統。下載下面的企業版。不下載…

鄉鎮集裝箱生活污水處理設備處理效率高

鄉鎮集裝箱生活污水處理設備處理效率高 鄉鎮集裝箱生活污水處理設備優勢 結構緊湊&#xff1a;集裝箱式設計減少了占地面積&#xff0c;便于在土地資源緊張的鄉鎮地區部署。 安裝方便&#xff1a;設備出廠前已完成組裝和調試&#xff0c;現場只需進行簡單的連接和調試即可投入使…

[數字圖像處理]基礎知識整理(部分,持續更新)

程序中描述一副圖像&#xff0c;已知其橫向縱向的像素個數即可&#xff08;&#xff09; 灰度直方圖能反映一副圖像各個灰度級像素占圖像的面積比&#xff08;√&#xff09; 從程序編寫的角度看&#xff0c;描述一副圖像的基本屬性通常包括其分辨率&#xff0c;即圖像的寬度…

Docker鏡像和容器的管理

1 Docker鏡像管理操作 開啟鏡像加速 根據關鍵字查詢鏡像 下載查看鏡像 詳細鏡像信息 查看latest版本 上傳鏡像到阿里云倉庫 2 Docker容器操作 關于容器根據第一個pid進程是否能正常在前臺運行

19. 地址轉換

地址轉換 題目描述 Excel 是最常用的辦公軟件。每個單元格都有唯一的地址表示。比如&#xff1a;第 12 行第 4 列表示為&#xff1a;"D12"&#xff0c;第 5 行第 255 列表示為"IU5"。 事實上&#xff0c;Excel 提供了兩種地址表示方法&#xff0c;還有一…

算法訓練營第30天|122.買賣股票的最佳時機II|55. 跳躍游戲|45.跳躍游戲II|1005.K次取反后最大化的數組和

122.買賣股票的最佳時機II 思路&#xff1a;只有前一天與后一天的利潤為正時&#xff0c;才將其加入總利潤。 55. 跳躍游戲 思路&#xff1a;找最大覆蓋范圍 出錯點&#xff1a;數組的遍歷&#xff0c;遍歷范圍應該是覆蓋范圍內 45.跳躍游戲II 思路&#xff1a; 局部最優&am…

批量爬取B站網絡視頻信息

使用XPath爬取B站視頻鏈接等相關信息 分析B站html框架獲取內容完整代碼 對于B站&#xff0c;目前網上的爬蟲大多都是使用通過解析服務器的響應來爬取想要的內容&#xff0c;下面我們通過使用XPath來爬取B站上一些想要的信息 此次任務我們需要對B站搜索到的關鍵字&#xff0c;并…

數據結構 —— FloydWarshall算法

數據結構 —— FloydWarshall算法 FloydWarshall算法三種最短路徑算法比較1. Dijkstra算法2. Bellman-Ford算法3. Floyd-Warshall算法總結 我們之前介紹的兩種最短路徑算法都是單源最短路徑&#xff0c;就是我們要指定一個起點來尋找最短路徑&#xff0c;而我們今天介紹的Floyd…

ctfshow-web入門-文件上傳(web166、web167)(web168-web170)免殺繞過

目錄 1、web166 2、web167 3、web168 4、web169 5、web170 1、web166 查看源碼&#xff0c;前端只讓傳 zip 上傳 zip 成功后可以進行下載 隨便搞一個壓縮包&#xff0c;使用記事本編輯&#xff0c;在其內容里插入一句話木馬&#xff1a; 上傳該壓縮包&#xff0c;上傳成功…

附下載 | 100項能源領域網絡與數據安全政策全集(2024版)

能源是工業的糧食&#xff0c;能源安全事關國家根本安全。當今國際局勢風云變幻&#xff0c;全球地緣政治、經濟、科技體系正經歷深刻變化&#xff0c;能源局勢將更加錯綜復雜&#xff0c;威脅能源安全的各種“灰犀牛”“黑天鵝”事件時有發生&#xff0c;促使國際能源版圖深刻…

system V共享內存【Linux】

文章目錄 原理shmgetftokshmat(share memory attach)shmdt&#xff0c;去關聯&#xff08;share memory delete attach&#xff09;shmctl ,刪除共享內存共享內存與管道 原理 共享內存本質讓不同進程看到同一份資源。 申請共享內存&#xff1a; 1、操作系統在物理內存當中申請…

詳解Redis:什么是Redis?

什么是Redis? Redis&#xff08;Remote Dictionary Server&#xff09;是一種開源的、高性能的、基于內存快速讀寫的的數據結構存儲系統&#xff0c;常用于緩存&#xff0c;分布式鎖等場景&#xff1b; Redis常用數據類型有哪些&#xff1f; String(字符串) 適用場景…

Qt中實現讓靜態圖片動起來,創建動畫效果

在現代應用程序開發中&#xff0c;動畫效果是提升用戶體驗的重要元素之一。Qt作為一個強大的跨平臺應用程序框架&#xff0c;提供了豐富的工具和庫來創建各種動畫效果。本文將介紹如何在Qt中使用靜態圖片創建動畫效果。 實現方法一 使用QTimer和QPixmap 1.準備圖片資源&#…

Qt圖形與圖片(Qt位置相關函數、Qt基礎圖形的繪制、雙緩沖機制、顯示SVG格式圖片)

此篇文章介紹幾種主要位置函數及其之間的區別&#xff0c;以及各種與位置相關函數的使用場合&#xff1b;然后&#xff0c;通過一個簡單繪圖工具實例&#xff0c;介紹利用QPainter和QPainterPath兩種方法繪制各種基礎圖形&#xff1b;最后&#xff0c;通過幾個實例介紹如何利用…

暑假自律日記十

7.11 &#xff08;半小時日記打卡之——暑假第十天&#xff09; 日程 8.30起床 9.20到達逸夫樓開始總結區間DP&#xff0c;上午完成了區間DP和四邊形優化部分的學習 下午組隊打了一場去年的牛客多校&#xff0c;壓力有點大&#xff0c;問題也有點多&#xff0c;總而言之&…

GD32F303RET6讀取SGM58031電壓值

1、SGM58031芯片詳解 &#xff08;1&#xff09;SGM58031是一款低功耗&#xff0c;16位精度&#xff0c;delta-sigma (ΔΣ)模數轉換器(ADC)。它從3V到5.5V供電。 &#xff08;2&#xff09;SGM58031包含一個片上參考和振蕩器。它有一個I2C兼容接口&#xff0c;可以選擇四個I2…