Не могли бы вы помочь мне выяснить, что не так с DB_VENDOR в MyBatis? Я использую mybatis 3.4.2, mybatis-spring 1.3.1, spring 4.3.6.RELEASE.MyBatis DB_VENDOR не работает
Все, кроме запросов, зависящих от поставщика, отлично работает. Пример запроса не зависит от поставщика, это только ради этого примера. Если я удалю из него атрибут databaseId и удалю дублированный, этот запрос будет работать.
Мне нужно поддерживать Oracle и PostgreSQL и уже проверили метаданные getDatabaseProductName()
непосредственно в пределах моей тестовой области, получив «Oracle» и «PostgreSQL». Поэтому, если я правильно понял документацию, он должен работать, не так ли?
Все я с DatabaseID в месте:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): mappers.ConfigurationMapper.containsKey
тест-mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "Http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<databaseIdProvider type="DB_VENDOR">
<property name="PostgreSQL" value="postgres"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
<mappers>
<mapper resource="mybatis/ConfigurationMapper.xml"/>
</mappers>
</configuration>
тест-context.xml (с другой с PostgreSQL источником данных)
<mybatis:scan base-package="mappers" annotation="org.apache.ibatis.annotations.Mapper" factory-ref="sqlSessionFactory"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="username" value="test"/>
<property name="password" value="test"/>
</bean>
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:test-mybatis-config.xml"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
ConfigurationMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mappers.ConfigurationMapper">
<select id="containsKey" resultType="string" parameterType="string" databaseId="oracle">
SELECT '1' AS test FROM config_keys WHERE key = #{configKey}
</select>
<select id="containsKey" resultType="string" parameterType="string" databaseId="postgres">
SELECT '1' AS test FROM config_keys WHERE key = #{configKey}
</select>
</mapper>
интерфейс картографа:
@Mapper
public interface ConfigurationMapper {
String containsKey(@Param("configKey") String configKey);
}