Передача параметра в MyBatis @Select
Я пишу свое первое приложение MyBatis и застрял вокруг @Select. Я не знаю, в чем проблема с моим определением @Select, все выглядит нормально, но я получил Parameter not found
исключение.
Я следовал той же схеме, когда передавал параметры своему оператору @Insert, и он работает без проблем.
Я использую MyBatis 3.4.2.
Это мой @Select:
@Select("SELECT * "
+ "FROM configuration "
+ "WHERE key_name = #{key} AND "
+ "(#{userId} IS NULL AND user_id IS NULL) OR user_id = #{userId} AND "
+ "status = 1")
Configuration findByKeyAndUserId(String key, Long userId);
Исключение, которое я получил:
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]
2 ответа
Когда вы передаете объект с одним параметром, доступ к свойствам осуществляется напрямую через метод получения или ключ, заданный для карты. Если вы хотите передать несколько параметров в методе, вы должны назвать параметры с аннотацией:
Configuration findByKeyAndUserId(@Param("key") String key, @Param("userId") Long userId);
Этот синтаксис, основанный на аннотациях, фактически ведет себя как карта ключ-значение. Ключи предоставляются @Param. Имя, которое вы выбираете для переменных параметров, не отображается.
Пожалуйста, попробуй -parameters
опция компиляции предоставляется начиная с JDK 8. Вы можете опустить @Param
аннотаций.
См. https://github.com/mybatis/mybatis-3/issues/549
Благодарю.