Я использую mybatis mappers (XML) и конфигурацию spring. Для запуска сегментов sql я установил vendorProperties, datasource и sqlSessionFactory (включая databaseIdProvider). Дополнительно предусмотрен databaseId = "oracle" в картографе. Картографы настраиваются в файле mybatis-config.
Когда я запускаю службу, я вижу сообщение об ошибке, хотя пространство имен сопоставителя и идентификатор фрагмента SQL совпадают с именем.
"Invalid bound statement (not found):"
Конфигурация картографа:
<select id = "getNextId" resultType = "java.lang.Integer" databaseId = "db2"> SELECT NEXT VALUE FOR TBL1 FROM SYSIBM.SYSDUMMY1 </select>
<select id = "getNextId" resultType = "java.lang.Integer" databaseId = "Oracle"> SELECT TBL1.NEXTVAL FROM DUAL </select>
AppContext.xml:
<bean id = "vendorProperties" class = "org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name = "properties">
<props>
<prop key = "DB2">db2</prop>
<prop key = "Oracle">oracle</prop>
<prop key = "H2">h2</prop>
<prop key = "MySQL">mysql</prop>
</props>
</property>
</bean>
<bean id = "sqlSessionTemplate" class = "org.mybatis.spring.SqlSessionTemplate" destroy-method = "clearCache">
<constructor-arg ref = "sqlSessionFactory"/>
</bean>
Также AppContext.xml содержит bean-компонент databaseIdProvider:
<bean id = "databaseIdProvider" class = "org.apache.ibatis.mapping.VendorDatabaseIdProvider">
<property name = "properties" ref = "vendorProperties"/>
</bean>
<bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
<property name = "dataSource" ref = "dataSource"/>
<property name = "configLocation" value = "classpath:mappers/mybatis-config.xml"/>
<property name = "databaseIdProvider" ref = "databaseIdProvider"/>
</bean>
Может ли кто-нибудь помочь определить, почему я продолжаю получать ошибку «Недопустимый связанный оператор (не найден)» при анализе запроса, связанного с getNextId?
Конфигурация сопоставителя: <select id = "getNextId" resultType = "java.lang.Integer" databaseId = "db2"> ВЫБРАТЬ СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ ДЛЯ TBL1 ИЗ SYSIBM.SYSDUMMY1 </select> <select id = "getNextId" resultType = "java. lang.Integer "databaseId = " Oracle "> ВЫБРАТЬ TBL1.NEXTVAL ИЗ ДВОЙНОГО </select>
AppContext.xml: <bean id = "vendorProperties" class = "org.springframework.beans.factory.config.PropertiesFa ctoryBean"> <property name = "properties"> <props> <prop key = "DB2"> db2 < / prop> <prop key = "Oracle"> oracle </prop> <prop key = "H2"> h2 </prop> <prop key = "MySQL"> mysql </prop> </props> </property> </bean> <bean id = "sqlSessionTemplate" class = "org.mybatis.spring.SqlSessionTemplate" destroy-method = "clearCache"> <constructor-arg ref = "sqlSessionFactory" /> </bean>
Также AppContext.xml содержит bean-компонент databaseIdProvider: <bean id = "databaseIdProvider" class = "org.apache.ibatis.mapping.VendorDatabaseIdProvider"> <property name = "properties" ref = "vendorProperties" /> </bean> <bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean"> <property name = "dataSource" ref = "dataSource" /> <property name = "configLocation" value = "classpath: mappers / mybatis-config.xml" /> <property name = "databaseIdProvider" ref = "databaseIdProvider" /> </bean>
Может ли кто-нибудь помочь определить, почему я продолжаю получать ошибку «Недопустимый связанный оператор (не найден)» при анализе запроса, связанного с getNextId?
Моя версия mybatis-spring - 1.2.1, а версия mybatis - 3.2.3 на случай, если это будет полезно.
добавляйте существенные детали к самому вопросу, а не к комментариям
Приведите пример того, что вы сделали, чтобы пользователям было легче правильно ответить на ваш вопрос.