文章目錄
- 前言
- 一、MybatisPlusInterceptor 概覽
- 1. 屬性
- 2. InnerInterceptor 接口
- 二、使用示例
- 1.Spring 配置
- 2.Spring Boot 配置
- 3 .mybatis-config.xml 配置
- 三、攔截忽略注解 @InterceptorIgnore
- 四、手動設置攔截器忽略執行策略
- 五、本地緩存 SQL 解析
- 總結
前言
MyBatis-Plus 提供了一系列強大的插件來增強 MyBatis 的功能,這些插件通過 MybatisPlusInterceptor
來實現對 MyBatis 執行過程的攔截和增強。以下是這些插件的詳細介紹和使用方法。
注意
版本要求:3.4.0 版本以上
一、MybatisPlusInterceptor 概覽
MybatisPlusInterceptor
是 MyBatis-Plus
的核心插件,它代理了 MyBatis
的 Executor#query
、Executor#update
和 StatementHandler#prepare
方法,允許在這些方法執行前后插入自定義邏輯。
1. 屬性
MybatisPlusInterceptor
有一個關鍵屬性 interceptors
,它是一個 List<InnerInterceptor>
類型的集合,用于存儲所有要應用的內部攔截器。
2. InnerInterceptor 接口
所有 MyBatis-Plus
提供的插件都實現了 InnerInterceptor
接口,這個接口定義了插件的基本行為。目前,MyBatis-Plus 提供了以下插件:
- 自動分頁:
PaginationInnerInterceptor
- 多租戶:
TenantLineInnerInterceptor
- 動態表名:
DynamicTableNameInnerInterceptor
- 樂觀鎖:
OptimisticLockerInnerInterceptor
- SQL 性能規范:
IllegalSQLInnerInterceptor
- 防止全表更新與刪除:
BlockAttackInnerInterceptor
注意
使用多個插件時,需要注意它們的順序。建議的順序是:
- 多租戶、動態表名
- 分頁、樂觀鎖
- 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 的功能,提高開發效率。