Я пытаюсь написать этот запрос в MyBatisиндекс MyBatis параметров вне диапазона
(select * from table1 where field1 like '%"name":"appname"%' limit 1)
union all
(select * from table2 where field1 like '%"name":"appname"%' limit 1)
limit 1
Так что я создал эту аннотацию:
@Select({
"(select * from table1 where field1 like '%\"name\":\"#{name,jdbcType=VARCHAR}\"%' limit 1)",
"union all",
"(select * from table2 where field1 like '%\"name\":\"#{name,jdbcType=VARCHAR}\"%' limit 1)",
"limit 1"
})
@Results({
@Result(column="ID", property="id", jdbcType=JdbcType.INTEGER, id=true)
})
Object hasName(@Param("name")String name);
Но когда я запускаю его я получаю это исключение :
не удалось установить параметры для отображения: ParameterMapping {свойство = 'имя', режим = IN, javaType = класс java.lang.String, jdbcType = VARCHAR, numericScale = нуль, т esultMapId = 'null', jdbcTypeName = 'null', expression = 'null'}. Причина: org.apache.ibatis.type.TypeException: параметр ошибки, не равный нулю для параметра # 1, с JDBCType VARCHAR. Попробуйте установить другой JdbcType для этого параметра или другого свойства конфигурации. Причина: java.sql.SQLException: Индекс параметров вне диапазона (1> количество параметров, которое равно 0).
Могу ли я сопоставить аннотацию, или что-то не хватает? Я не хочу использовать XML для этого.
Вы можете передать два параметра разные имена и проверки? 'hasName (@Param (" name ") Имя строки, @Param (" otherName ") String otherName);' Я думаю, проблема в том, что mybatis ожидает два параметра, но вы их передаете. – Lucky
@ Lucky Я получаю ту же ошибку. Я думаю, что что-то не так с " – feco
Можете ли вы также опубликовать эквивалент mysql этого запроса в своем вопросе и попробовать, если это работает в вашем workbench mysql? – Lucky