Проблема возникает из-за того, что mybatis не может передать параметры из метода mapper в конструктор.
Необходимо либо аннотировать параметры в компоновщике:
public static String buildFindByDynamicFilter(
final @Param("username") String username,
final @Param("name") String name,
final @Param("email") String email) {
, либо удалить параметры, которые не используются в сигнатуре метода компоновщика (в вашем случае все они могут быть удалены как ни одиниз них используется в компоновщике):
public static String buildFindByDynamicFilter() {
...
}
или включите имена параметров метода в скомпилированные классы и убедитесь, что параметры в методе компоновщика названы так же, как параметры в преобразователеmethod.
Mybatis Java API, который создает запрос (такие функции, как SELECT
, FROM
, WHERE
и т. д.), не нуждается в параметрах сам по себе.Цель компоновщика - сгенерировать текст SQL-запроса.Связывание параметров происходит позже, когда mybatis извлек текст запроса из компоновщика (или @Select
аннотация или xml mapper), и запрос выполняется с использованием подготовленных операторов JDBC.
[name, param3, param1, email, username, param2]
- параметры метода mapper.Каждый параметр доступен под двумя ключами, первый - это значение аннотации @Param
в аргументе метода mapper, а второй - просто порядковый номер аргумента с префиксом param
(индекс равен нулю, а первыйпропускается, потому что первый параметр метода сопоставления неявный this
).Mybatis пытается показать разумное сообщение об ошибке со списком доступных параметров, но если информация о параметрах метода недоступна, это сбивает с толку.
В компоновщике, если нет аннотации @Param
, отражение используется дляполучить параметр метода.Если информация о параметрах метода не включена в -parameters
опцию javac, тогда имена аргументов будут arg0
, arg1
и т. Д.