MybatisPlus ページング操作で発生した問題
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 構成フィールドにエラーがある場合、アイデア コンソールにエラー メッセージが報告されます。
- 結果がエラーであっても、コンソールにエラー メッセージが表示されない場合は、例外が捕捉されて処理されたことを意味します。多くの場合、例外メッセージを出力するのが最も便利です。
- 以前にページングを行うときに「」を書かなかった
;
ので、この問題は発生しませんでした。MyBatisPlus の XML ファイルに書かれている SQL 文の最後は「 」を;
書いても書かなくても良いとずっと思っていましたが、この出来事をきっかけ;
に SQL 文の最後に「 」を書いてはいけないと思い直しました。