首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyBatis DB_VENDOR不工作

MyBatis DB_VENDOR不工作
EN

Stack Overflow用户
提问于 2017-02-15 14:22:59
回答 1查看 2.6K关注 0票数 3

你能帮我找出DB_VENDOR in MyBatis的什么毛病吗?我使用的是mybatis3.4.2,mybatis-Spring1.3.1,Spring4.3.6。

除了依赖于供应商的查询之外,一切都正常工作。示例查询不依赖于供应商,这只是为了这个示例。--如果我从其中删除databaseId属性并删除重复的属性,则此查询工作.

我需要支持Oracle和PostgreSQL,并且已经在我的测试范围内直接检查了元数据getDatabaseProductName(),获得了"Oracle“和"PostgreSQL”。所以,如果我的文档是正确的,它应该是有效的,不是吗?

我所得到的databaseId是到位的:

代码语言:javascript
复制
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): mappers.ConfigurationMapper.containsKey

Test-mybati-config.xml:

代码语言:javascript
复制
<?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>

test-context.xml (有另一个带有PostgreSQL数据源的)

代码语言:javascript
复制
    <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

代码语言:javascript
复制
<?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接口:

代码语言:javascript
复制
@Mapper
public interface ConfigurationMapper {

    String containsKey(@Param("configKey") String configKey);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-15 18:39:23

找到了。答案在XMLConfigBuilder中:

代码语言:javascript
复制
    Environment environment = configuration.getEnvironment();
    if (environment != null && databaseIdProvider != null) {
      String databaseId = databaseIdProvider.getDatabaseId(environment.getDataSource());
      configuration.setDatabaseId(databaseId);
    }

为了使databaseId工作,必须对环境进行配置。

下面是如何在spring环境中使用多db支持:http://www.mybatis.org/spring/factorybean.html

代码语言:javascript
复制
<bean id="vendorProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
        <props>
            <prop key="SQL Server">sqlserver</prop>
            <prop key="DB2">db2</prop>
            <prop key="Oracle">oracle</prop>
            <prop key="MySQL">mysql</prop>
        </props>
    </property>
</bean>

<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="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
    <property name="databaseIdProvider" ref="databaseIdProvider"/>
</bean>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42251978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档