文章目录
- 前言
- 一、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 的功能,提高开发效率。