Проблема связана с передачей параметров в запрос.
Когда вы используете выражение, например #{parameterName}
, для указания параметра mybatis преобразует его в заполнитель параметра jdbc ?
, а затем задает параметр по индексу.Для этого запроса:
select * from a where col = #{param}
запрос, сгенерированный mybatis, будет выглядеть следующим образом:
select * from a where col = ?
Поскольку вы процитировали параметр следующим образом:
select * from a where col = '#{param}'
сгенерированный запросстановится:
select * from a where col = '?'
И это JDBC API обрабатывает как запрос без каких-либо параметров, поэтому, когда mybatis пытается установить параметры с помощью JDBC PreparedStatement
API, ошибка заключается в том, что индекс параметра недопустим.
Чтобы исправить проблему, удалите кавычки:
@Select("SELECT A.PERSON_ID,A.PERSON_ADDRESS, C.CUSTOMER_NAME," +
" B.CUSTOMER_DOB," +
" FROM PERSON A, CUSTOMER B, CUSTOMER_DETAILS C" +
" WHERE A.CUSTOMER_ID=C.CUSTOMER_ID" +
" AND A.CUSTOMER_ID=B.CUSTOMER_ID (+)" +
" AND C.PERSON_NAME=#{personName, jdbcType=VARCHAR, mode=IN, javaType=String}" +
" AND C.CUSTOMER_ID=#{customerID, jdbcType=VARCHAR, mode=IN, javaType=String}")