MybatisPlus分页操作中遇到的问题
- 1. 问题的出现
- 2. 根据提示检查SQL语句
- 3. 检查依赖版本与配置
- 4. 查找具体报错信息
- 5. 总结
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语句结尾还是不要写“;
”。