MyBatis-Plus 提供了一系列强大的插件来增强 MyBatis 的功能,这些插件通过 MybatisPlusInterceptor 来实现对 MyBatis 执行过程的拦截和增强。以下是这些插件的详细介绍和使用方法。
版本要求:3.4.0 版本以上
MybatisPlusInterceptor 概览MybatisPlusInterceptor 是 MyBatis-Plus 的核心插件,它代理了 MyBatis 的 Executor#query、Executor#update 和 StatementHandler#prepare 方法,允许在这些方法执行前后插入自定义逻辑。
属性MybatisPlusInterceptor 有一个关键属性 interceptors,它是一个 List 类型的集合,用于存储所有要应用的内部拦截器。
InnerInterceptor 接口所有 MyBatis-Plus 提供的插件都实现了 InnerInterceptor 接口,这个接口定义了插件的基本行为。目前,MyBatis-Plus 提供了以下插件:
自动分页: PaginationInnerInterceptor多租户: TenantLineInnerInterceptor动态表名: DynamicTableNameInnerInterceptor乐观锁: OptimisticLockerInnerInterceptorSQL 性能规范: IllegalSQLInnerInterceptor防止全表更新与删除: BlockAttackInnerInterceptor使用多个插件时,需要注意它们的顺序。建议的顺序是:
多租户、动态表名分页、乐观锁SQL 性能规范、防止全表更新与删除总结:对 SQL 进行单次改造的插件应优先放入,不对 SQL 进行改造的插件最后放入。
使用示例Spring 配置在 Spring 配置中,你需要创建 MybatisPlusInterceptor 的实例,并将它添加到 MyBatis 的插件列表中。以下是一个分页插件的配置示例:
Spring Boot 配置在 Spring Boot 项目中,你可以通过 Java 配置来添加插件:
@Configuration@MapperScan("scan.your.mapper.package")public class MybatisPlusConfig { /** * 添加分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); return interceptor; }}mybatis-config.xml 配置如果你使用的是 XML 配置,可以在 mybatis-config.xml 中添加插件:
拦截忽略注解 @InterceptorIgnore@InterceptorIgnore 注解可以用来忽略某些插件的拦截。该注解有多个属性,分别对应不同的插件。如果某个属性没有值,则默认为 false,表示不忽略该插件;如果设置为 true,则忽略对应的插件。
手动设置拦截器忽略执行策略从 3.5.3 版本开始,你可以手动设置拦截器的忽略执行策略,这比注解更加灵活。但是,你需要手动关闭调用方法。
// 设置忽略租户插件InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());// 执行逻辑 ..// 关闭忽略策略InterceptorIgnoreHelper.clearIgnoreStrategy();本地缓存 SQL 解析MyBatis-Plus 支持本地缓存 SQL 解析,这对于分页、租户等插件特别有效。你可以通过静态代码块来设置缓存处理类:
static { // 默认支持序列化 FstSerialCaffeineJsqlParseCache,JdkSerialCaffeineJsqlParseCache JsqlParserGlobal.setJsqlParseCache(new JdkSerialCaffeineJsqlParseCache( (cache) -> cache.maximumSize(1024) .expireAfterWrite(5, TimeUnit.SECONDS)) );}以上是 MyBatis-Plus 插件主体的详细介绍和使用方法。通过这些插件,你可以大大增强 MyBatis 的功能,提高开发效率。