0
Мой интерфейс-интерфейс выглядит следующим образом.Включенный фрагмент SQL не заменяет параметр
public interface CommonMapper {
long selectSequenceNumber(String sequenceName);
}
И я подготовил калькулятор sql выглядит так.
<sql id="sequenceNumber">
<choose>
<when test="_databaseId == 'derby'">
VALUES NEXT VALUE FOR #{sequenceName}
</when>
<otherwise>
SELECT #{sequenceName}.NEXTVAL FROM DUAL
</otherwise>
</choose>
</sql>
<select id="selectSequenceNumber" resultType="_long">
<!--<include refid="....mapper.CommonMapper.sequenceNumber"/>-->
<include refid="sequenceNumber"/>
</select>
Когда я проверить Mapper #{sequenceName}
часть не замещена дано.
14:36:09.492 [main] DEBUG ....selectSequenceNumber - ==> Preparing: VALUES NEXT VALUE FOR ?
14:36:09.724 [main] ERROR ....PersistenceTests - failed to apply function for SqlSession
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "?" at line 1, column 23.
### The error may exist in .../CommonMapper.xml
### The error may involve ....CommonMapper.selectSequenceNumber
### The error occurred while executing a query
### SQL: VALUES NEXT VALUE FOR ?
### Cause: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "?" at line 1, column 23.
Это нормально? Как я могу это исправить?
Могу ли я на самом деле использовать '_databaseId', кроме' 'У меня есть еще одна ошибка' Параметр '_databaseId' not found'. –
Насколько я знаю, вы можете использовать '_databaseId' в любом XML, если это глобальный параметр, и если вы можете записать его в' '. –
yalpertem
Помните, что использование синтаксиса $ {} может сделать ваше приложение уязвимым для SQL-инъекции (если вход поступает из ненадежного источника). – doughgle