MyBatisのBindingExceptionエラーに悩んでいる方へ
マッパーファイルのパス設定に要注意
MyBatisを使用していると、次のようなエラーに遭遇することがある。
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
このエラーにしばらく悩まされていたが、原因は非常にシンプルだった。
単純だからこそ気づくのに時間がかかってしまっている人も多いかもしれない。
また、手動でディレクトリを一つずつ作成しているパターンなどはこの手のエラーで躓きやすいのではないかと感じたため、画像を添付しながら解説記事として残しておく。
エラーの原因
プロジェクトのディレクトリ構成において、Javaのパッケージ名に合わせて resources
フォルダ下にも、同じようにディレクトリを配置する必要があり、構成が異なるとマッパーが、マッパーファイルの場所が正しく指定されていなかったことが原因であった。
例えば、次のような構造の場合:
src/main/java/appName/mapper/YourMapper.java
対応するマッパーファイルは、次の場所に配置しなければならない。
src/main/resources/appName/mapper/YourMapper.xml
Javaのパッケージと同様のディレクトリ構成を resources
フォルダにも作成しなければならない。
例えば、ディレクトリ構造が下記のようになっているとエラーが解消される可能性がある
※上記のファイルパスのappNameが、画像だとimportAppという名前になっている
このディレクトリ構造が正しくないと、MyBatisは対応するマッパーファイルを見つけることができず、エラーが発生する。
解決策
このエラーが出た場合、まずは次の点を確認すべきであると思った。
-
resources
フォルダ内のディレクトリ構成が正しいか? - マッパーファイルのパスがJavaパッケージと一致しているか?
自分もこの見落としに気づくまで時間を要したが、解決すればスムーズに動作するはずだ。
原因が他にある可能性も十分にあるが、まずディレクトリの構成を見直してみてもいいかもしれない。
少しでも参考になれば幸いである。