Mybatis-Plus 全局配置无效

依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>

配置文件修改

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.hz.waste.entity.model
  global-config:
     #id-type: 3    #这种配置是不生效的
     #field-strategy: 2 #这种配置是不生效的
    db-config:
      #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: ID_WORKER  #改为这种可以
      #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
      field-strategy: NOT_EMPTY #改为这种可以

  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull
    jdbc-type-for-null: 'null'
    call-setters-on-nulls: true
    #打印语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
<think>好的,我现在需要解决用户关于MyBatis-Plus分页查询的最大数量限制或配置方法的问题。首先,我得回忆一下MyBatis-Plus的相关知识,尤其是分页插件部分。用户提到他们已经在使用分页功能,但想知道如何设置最大数量限制,防止查询过多数据导致性能问题。 首先,我记得MyBatis-Plus的分页插件是PaginationInnerInterceptor。默认情况下,分页查询的每页数量是由前端传入的Page对象的size参数决定的。但如果没有限制,用户可能传入一个非常大的size值,比如10000,这样一次性查询大量数据会影响数据库性能。所以用户的需求是合理的,需要找到配置最大数量限制的方法。 接下来,我需要确认MyBatis-Plus是否原生支持设置最大页数的限制。查阅官方文档或相关资料,发现MyBatis-Plus本身并没有直接提供设置最大分页数量的参数。通常,这个限制需要在业务层进行处理,例如在Controller层校验参数,或者在Service层进行拦截。 但是,用户可能希望有一个全局配置,而不是在每个接口都写校验逻辑。这时候可以考虑自定义分页插件,通过继承或扩展PaginationInnerInterceptor来重写beforeQuery方法,在这里对size参数进行检查。例如,设置一个maxLimit变量,如果传入的size超过这个值,就自动调整为maxLimit。 另外,用户提到的引用[1]中提到了合理化查询(reasonable=true),这个功能可以自动修正页码,比如超过总页数时查询最后一页,但并没有提到限制每页大小。所以这可能需要结合自定义处理来实现。 总结下来,解决方案有两种:一是在业务代码中校验size参数;二是自定义分页插件来全局限制。需要详细说明这两种方法的实现步骤,并给出代码示例,比如如何创建自定义拦截器,并注册到MyBatis-Plus配置中。 还需要提醒用户,除了设置最大数量,还可以结合分页合理化和其他性能优化措施,比如避免不必要的字段查询,使用索引优化数据库查询等。确保回答覆盖用户可能关心的点,比如如何全局配置,以及具体的代码示例,这样用户能够直接应用。</think>### MyBatis-Plus分页查询的最大数量限制配置方法 MyBatis-Plus 分页查询本身**未直接提供最大数量限制的全局配置参数**,但可以通过以下两种方式实现分页查询数量的控制: --- #### 1. **业务层参数校验(推荐)** 在接收分页参数的 Controller 层或 Service 层,对 `size` 参数进行校验。例如,设置单页最大允许查询 1000 条数据: ```java // Controller 示例 @GetMapping("/list") public Page<User> listUsers(@RequestParam(defaultValue = "1") int current, @RequestParam(defaultValue = "10") int size) { // 强制限制单页最大数量 size = Math.min(size, 1000); return userService.page(new Page<>(current, size)); } ``` --- #### 2. **自定义分页插件拦截** 通过扩展 `PaginationInnerInterceptor` 拦截器,在 SQL 执行前动态修正 `size`: ```java public class CustomPaginationInterceptor extends PaginationInnerInterceptor { private static final int MAX_LIMIT = 1000; @Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { if (parameter instanceof Page<?> page) { // 修正单页数量 if (page.getSize() > MAX_LIMIT) { page.setSize(MAX_LIMIT); } } super.beforeQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql); } } // 注册到 MyBatis-Plus 配置 @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new CustomPaginationInterceptor()); return interceptor; } } ``` --- ### 性能优化建议 1. **合理化查询配置** 在 `application.yml` 中启用合理化查询,防止无效的大页码请求: ```yaml pagehelper: reasonable: true # 页码超出总页数时自动修正到最后一页[^1] ``` 2. **数据库索引优化** 确保分页查询字段(如排序字段)有合适的索引支持。 3. **避免深度分页** 使用 `WHERE` 条件配合 `id > lastMaxId` 替代 `LIMIT m, n`,减少 `OFFSET` 带来的性能损耗[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值