ERROR 13700 --- [nio-8080-exec-8] c.b.m.plugins.PaginationInterceptor : Error: Method queryTotal execution error !
时间: 2025-07-09 07:47:57 浏览: 12
<think>好的,用户遇到了在使用MyBatis-Plus分页插件时,PaginationInterceptor的queryTotal方法执行出错的问题。我需要先分析可能的原因,并给出解决方案。根据用户提供的引用内容,错误通常与SQL语法或字段映射有关。
首先,引用[1]、[2]、[3]都提到SQL语句错误是主要原因。比如,SQL中的关键字错误、表名或列名不正确,或者分页插件自动生成的COUNT语句有问题。用户需要检查生成的SQL是否正确,特别是是否有语法错误,比如漏掉空格、错误的关键字顺序等。例如,引用[2]中的错误是因为在DESC后面有逗号,导致语法错误,这可能是在动态拼接SQL时出现的。
其次,引用[3]和[4]指出实体类与数据库字段不匹配的情况。如果实体类中存在数据库不存在的字段,但没有用@TableField(exist=false)标记,会导致查询时包含不存在的列,从而引发错误。这时候需要检查所有实体类的属性是否与数据库表结构一致,尤其是分页查询涉及的字段。
接下来,用户需要逐步排查问题。首先,开启MyBatis-Plus的SQL日志,查看实际执行的SQL语句,确认是否有语法错误。如果有自定义的count查询,需要确保其正确性。然后,核对实体类与数据库字段,使用注解排除非数据库字段。此外,检查分页插件的配置是否正确,特别是旧版PaginationInterceptor和新版MybatisPlusInterceptor的配置方式不同,避免版本不兼容的问题。
最后,建议用户提供具体的错误信息和SQL日志,以便更精准地定位问题。同时,可以尝试简化查询,逐步排除可能的原因,比如先测试不带分页的查询是否正常,再逐步添加分页逻辑,观察何时出现错误。</think>### PaginationInterceptor queryTotal方法执行错误解决方案
当使用MyBatis-Plus分页插件出现`PaginationInterceptor`的`queryTotal`方法报错时,需从以下方向排查:
---
#### 1. SQL语法错误(最常见原因)
- **现象**:错误信息包含`SQLSyntaxErrorException`,如引用[2]中`DESC,REQPARAMS,...`因缺少空格导致的语法错误
- **解决方案**:
- 检查Mapper接口中SQL语句的拼写,特别是`ORDER BY`、`GROUP BY`后的字段格式
- 在XML文件中检查动态SQL标签(如`<if>`)的闭合是否完整
- 使用MyBatis-Plus的SQL打印功能验证实际执行的SQL:
```yaml
# application.yml
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
```
- **注意**:分页插件会自动生成`SELECT COUNT(1)`语句,若主查询包含复杂JOIN或子查询可能导致COUNT语句错误,此时需要自定义count查询[^3]
---
#### 2. 字段映射不一致
- **现象**:如引用[4]所述,实体类属性与数据库字段不匹配
- **解决方案**:
1. 检查所有实体类中被`@TableField`注解标记的字段
2. 确认非数据库字段已添加`@TableField(exist = false)`
3. 检查字段命名是否符合MyBatis-Plus的默认驼峰转下划线规则
4. 使用`@TableName`注解明确指定表名
---
#### 3. 分页插件配置问题
- **新版配置**(MyBatis-Plus 3.4+):
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
```
- **旧版配置**(已过时):
```java
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
```
> 注意:如果同时存在新旧配置会导致冲突,需统一使用新版配置
---
#### 4. 其他排查方向
- **数据库驱动兼容性**:检查`pom.xml`中MySQL驱动版本是否与服务器版本匹配
- **分页参数越界**:验证传入的`current`和`size`参数是否合法
- **事务管理**:确认在Service层添加了`@Transactional`注解
---
#### 典型错误修复示例
假设错误日志显示:
```sql
SELECT COUNT(1) FROM (SELECT id, create_time AS createTime FROM userWHERE age > 18) TOTAL
```
可发现`userWHERE`缺少空格,修正为:
```xml
<select id="selectPage" resultType="User">
SELECT id, create_time AS createTime
FROM user
WHERE age > 18
</select>
```
---
阅读全文
相关推荐


















