MybatisPlus分页操作中遇到的问题及解决
作者:小镇拾光
这段文章主要讲述了在MyBatisPlus项目中遇到的SQL运行报错问题排查过程,通过检查SQL语句、MySQL服务状态及异常处理类最终定位问题;强调强调了SQL语句的重要性及正确处理异常信息的重要性
1. 问题的出现
员工分页查询写好之后,运行测试,结果报错:数据库异常,操作失败!

2. 根据提示检查SQL语句
首先怀疑:
MySQL服务未开启,或者服务器宕机,或者SQL语句拼写有问题。
我将控制台中的SQL日志复制到Navicat中,删除LIMIT 10;能够运行出结果,基本排除此问题。(日志的重要性,一定要开启啊!!!)
3. 检查依赖版本与配置
然后怀疑:
MyBatisPlus配置有问题。检查MyBatisPlus版本信息和配置内容之后感觉这里出错的可能性不大。
4. 查找具体报错信息
想要查看Idea中的报错结果发现,idea中没有报错信息。
因此推断,这段报错信息出自我自己写的全局异常处理类。
因此我进入全局异常处理方法,尝试打印异常信息:
package com.sky.server.config.exception;
import com.sky.server.pojo.RespBean;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;
/**
* 全局异常处理
*/
@RestControllerAdvice
public class GlobalException {
@ExceptionHandler(SQLException.class)
public RespBean mySqlException(SQLException e){
if (e instanceof SQLIntegrityConstraintViolationException){
return RespBean.error("SQL完整性约束违反异常: 该数据有关联数据,操作失败!");
}
/** 添加内容,打印异常信息 **/
System.out.println("数据库异常具体信息为:");
System.out.println(e.getMessage());
/** 添加内容,打印异常信息 **/
return RespBean.error("数据库异常,操作失败!");
}
}
运行之后打印结果为:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 10' at line 37
分析:LIMIT 10附近有问题。
然后发现在SQL语句结尾处e.id后多写了一个分号“;”

将分号删除即可。
5. 总结
这次的错误其实不是大问题,但是还是存在一下几个点需要注意:
- SQL语句不熟悉,其实在一开始就可以定位到就是SQL语句有问题。
- 如果是XML配置字段有错误的话,Idea控制台会有报错信息。
- 当结果报错,但控制台没有错误信息的话,那就是被异常捕获并处理了,打印异常信息往往是最有用的。
- 之前在做分页的时候没有写“
;”,因此也没有引起这个问题。我一直以为MyBatisPlus的XML文件中编写的SQL语句结尾“;”的写或者不写都是可以的,这次事件提醒在SQL语句结尾还是不要写“;”。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
