1
0

More than 1 year has passed since last update.

MyBatis利用時に発生した例外から抜け出した話

Last updated at Posted at 2021-12-15

はじめに

O/Rマッパーの一つであるMyBatisを使いQiitaのような質問投稿アプリを作成しています。
そこで悩んだ例外処理の発生原因について、忘備録兼同じことで悩んでいる方の手助けができればと思い投稿しました。
認識が異なる点があればご指摘いただけると嬉しいです。。。

org.apache.ibatis.binding.BindingException

①リポジトリクラスにアノテーションが抜けていた

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.demo.repository.UserMapper.insert
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.7.jar:3.5.7]

こちらの例外は、ユーザー情報を入力し、登録ボタンを押して次の画面に遷移する際に発生しました。
発生原因としては、Javaで作成しているRepositoryクラスに@Insertのアノテーションが抜けていたことでした。
ちなみに全件検索やID検索をする際は@Select、更新では@Updateなどやりたい処理ごとにアノテーションをつける必要があります。

/** ユーザー情報を登録する */
@Insert("insert into users(name, email, password, zipcode, address, telephone) \n"
            + "        values(#{name},#{email},#{password},#{zipcode},#{address},#{telephone});")
public void insert(User user);


②パラメータの指定ができていなかった

org.apache.ibatis.binding.BindingException: Parameter 'email' not found. Available parameters are [arg1, arg0, param1, param2]
    at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212) ~[mybatis-3.5.7.jar:3.5.7]

「メールアドレス」と「パスワード」が一致している場合のみログインする処理を実装したとき、上記例外が発生しました。
こちらの例外発生は、@Param指定ができていないことが原因でした。
そのため、下記のようにパラメータを指定することで解決しました。

/** メールアドレスとパスワードが一致したレコードを取得する */
@Select("select * from users where email = #{email} and password = #{password};")
    public User findByEmailAndPassword(@Param("email") String email, @Param("password") String password);

以上が今回発生した例外処理と解決方法でした。
ご参考になれば幸いです。

参考資料

①リポジトリクラスにアノテーションが抜けていた

②パラメータの指定ができていなかった

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0