Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите с mybatis (не найден параметр) / 3 сообщений из 3, страница 1 из 1
07.08.2020, 13:18
    #39987443
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с mybatis (не найден параметр)
Вообщем не могу уловить логики

Код: xml
1.
2.
3.
4.
<insert id="someInsertStatement" parameterType="tutorial.SomeEntity">
    insert into some_table(id, a, b)
    select (some_table_seq.nextvalue), #{a}, #{b}) from dual
</insert>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Data
class SomeEnitity {
    private Long a;
    private String b;
}

// ....

class SomeMapper{
   public long someInsertStatement(@Param("someEntity") final SomeEntity someEntity);
}



вообще если в маппере есть @Param, то сущность "разматывается" т.е в запросе должно быть указано "#{a}" и "#{b}" (т.е. биндятся поля передаваемой сущности), если @Param нет то "#{someEntity.a}" и "${someEntity}" (биндится только сама сущность в методе)

Это правило едино и справедливо в самом приложении (spring boot).

В интеграционных тестах все интересней. Mybatis сам решает непонятно по какому правилу биндить параметры запроса. И непонятно как все таки заставить mybatis поступать единообразно. В тестах у mybatis мнение разделилось и некоторые методы в одном и том же маппере требуют указывать #{a} а некоторые #{someEntity.a}

Т.е. либо не пишу тесты, либо тесты падают, либо тесты работают, но не работает приложение. Либо пишу разные мапперы для тестов и для приложения, но не забываю при изменении запросов в маппере приложения переносить их в копию маппера для тестов

Пока склоняюсь к тому что логика подстановки меняется в зависимости от типа запроса (те. те в маппере указаны как statementType Callable) работают так же как в приложении, а вот insert (PreparedStatement) меняется от контекста по желанию mybatis
...
Рейтинг: 0 / 0
07.08.2020, 13:36
    #39987451
kolchanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с mybatis (не найден параметр)
>В интеграционных тестах все интересней. Mybatis сам решает непонятно по какому правилу биндить параметры запроса

Без примера этого интеграционного теста очень тяжело понять что не так.
...
Рейтинг: 0 / 0
07.08.2020, 15:36
    #39987529
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с mybatis (не найден параметр)
Разобрался

разница в приложении использовалось два вида mapper
один напрямую через inject второй через
sqlSession.insert("mapperMethodName" param) для batch запросов
как тот так
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите с mybatis (не найден параметр) / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]