赞
踩
从
Mybatis Plus 3.4.0
版本开始,不再使用旧版本的PaginationInterceptor
,而是使用MybatisPlusInterceptor
。
MybatisPlusInterceptor
是一系列的实现 InnerInterceptor
的拦截器链,也可以理解为一个集合。可以包括如下的一些拦截器
PaginationInnerInterceptor
(最常用)TenantLineInnerInterceptor
DynamicTableNameInnerInterceptor
OptimisticLockerInnerInterceptor
IllegalSQLInnerInterceptor
BlockAttackInnerInterceptor
@Configuration @MapperScan(basePackages = {"com.zimug.**.mapper"}) public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false // paginationInterceptor.setOverflow(false); // 设置最大单页限制数量,默认 500 条,-1 不受限制 // paginationInterceptor.setLimit(500); // 开启 count 的 join 优化,只针对部分 left join paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); return paginationInterceptor; } }
新的分页插件,一缓和二缓遵循 mybatis
的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false
避免缓存出现问题
@Configuration @MapperScan(basePackages = {"com.zimug.**.mapper"}) public class MybatisPlusConfig { /** * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除) */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 向 Mybatis 过滤器链中添加分页拦截器 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 还可以添加其他的拦截器 return interceptor; } @Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> configuration.setUseDeprecatedExecutor(false); } }
分页查询的使用方法没有变化,仍然和 Mybatis
之前的版本一致,没有变化。 这里简单举一个例子
// 查询第 pageNum 页,每页 pageSize 条数据
Page<SysUserOrg> page = new Page<> (pageNum,pageSize);
// 将分页参数 page 作为 Mybatis 或 Mybatis Plus 的第一个参数传入持久层函数,即可完成分页查询
return mySystemMapper.selectUser(page, 其他参数 );
package com.greatoo.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * mybatis-plus配置 */ @Configuration public class MybatisPlusConfig { /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 设置方言,多方言设置暂时找不到如何处理,低版本暂时只找到这一种处理方法 paginationInterceptor.setDialectType(DbType.SQL_SERVER2005.getDb()); return paginationInterceptor; } @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } }
package com.baomidou.mybatisplus.annotation; import lombok.Getter; @Getter public enum DbType { /** * MYSQL */ MYSQL("mysql", "%s LIKE CONCAT('%%',#{%s},'%%')", "MySql数据库"), /** * MARIADB */ MARIADB("mariadb", "%s LIKE CONCAT('%%',#{%s},'%%')", "MariaDB数据库"), /** * ORACLE */ ORACLE("oracle", "%s LIKE CONCAT(CONCAT('%%',#{%s}),'%%')", "Oracle数据库"), /** * DB2 */ DB2("db2", "%s LIKE CONCAT(CONCAT('%%',#{%s}),'%%')", "DB2数据库"), /** * H2 */ H2("h2", "%s LIKE CONCAT('%%',#{%s},'%%')", "H2数据库"), /** * HSQL */ HSQL("hsql", "%s LIKE CONCAT('%%',#{%s},'%%')", "HSQL数据库"), /** * SQLITE */ SQLITE("sqlite", "%s LIKE CONCAT('%%',#{%s},'%%')", "SQLite数据库"), /** * POSTGRE */ POSTGRE_SQL("postgresql", "%s LIKE CONCAT('%%',#{%s},'%%')", "Postgre数据库"), /** * SQLSERVER2005 */ SQL_SERVER2005("sqlserver2005", "%s LIKE '%%'+#{%s}+'%%'", "SQLServer2005数据库"), /** * SQLSERVER */ SQL_SERVER("sqlserver", "%s LIKE '%%'+#{%s}+'%%'", "SQLServer数据库"), /** * DM */ DM("dm", null, "达梦数据库"), /** * UNKONWN DB */ OTHER("other", null, "其他数据库"); /** * 数据库名称 */ private final String db; /** * LIKE 拼接模式 */ private final String like; /** * 描述 */ private final String desc; DbType(String db, String like, String desc) { this.db = db; this.like = like; this.desc = desc; } /** * <p> * 获取数据库类型(默认 MySql) * </p> * * @param dbType 数据库类型字符串 */ public static DbType getDbType(String dbType) { DbType[] dts = DbType.values(); for (DbType dt : dts) { if (dt.getDb().equalsIgnoreCase(dbType)) { return dt; } } return OTHER; } }
SpringBoot 配置双数据源,MyBatis-Plus 分页插件配置
package io.renren.config; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * mybatis-plus配置 */ @Configuration public class MybatisPlusConfig { /** * 防止修改与删除时对全表进行操作 */ @Bean public BlockAttackInnerInterceptor blockAttackInnerInterceptor() { return new BlockAttackInnerInterceptor(); } /** * 新的分页插件,一缓和二缓遵循 mybatis 的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 里面不要填写 DbType.MYSQL 做限制,就能支持多数据源 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。