読者です 読者をやめる 読者になる 読者になる

メンチカツ

ロースカツが好きです

【メモ】MyBatisのMapperでオーバーロードをしてはいけない

MyBatisで

public interface UserMapper {

  @Select("SELECT * FROM users")
  List<User> getUsers();

  @Select("SELECT * FROM users WHERE category_id = #{categoryId}")
  List<User> getUsers(@Param("categoryId") Integer categoryId);

}

と定義してビルドする。

と、以下のように怒られる😇

java.lang.IllegalArgumentException: Mapped Statements collection already contains value for jp.co.hoge.core.mapper.UserMapper.getUsers

これは、interface内でメソッド名を一意にすると解決します😙

public interface UserMapper {

  @Select("SELECT * FROM users")
  List<User> getUsers();

  @Select("SELECT * FROM users WHERE category_id = #{categoryId}")
  List<User> getUsersByCategoryId(@Param("categoryId") Integer categoryId);

}