在mybatis + spring中配置2个数据库

时间:2014-07-03 10:26:16

标签: database spring mybatis

我有一个mybatis + spring的现有设置,用于使用Oracle DB。我有一组java mapper接口,一组相应的mapper xmls(每个都引用了相应的java mapper)。我也需要为MSSQL设置支持,但发现很难做到这一点。我在com / mycomp / mob / db / mappers / mssql中创建了一组单独的xmls(特定于MSSQL的查询)。

下面是我的applicationConext.xml的摘录(这里DBDataSource是一个内部类,它读取配置文件以获取所有数据库详细信息)。

<bean name="dataSource" class="com.mycomp.mob.core.db.DBDataSource">
    <constructor-arg index="0" name="dbAlias" value="mob" />
    <constructor-arg index="1" name="cfgSection" value="primary" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.mycomp.mob.db.mappers.oracle" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="com.mycomp.mob.db.mappers.oracle" />
    <property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

以下是mybatis-config.xml的一部分(此处$ {} params使用较早的DBDatasource替换)

<configuration>
    <typeAliases>
        <package name="com.mycomp.mob.db.model" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/mycomp/mob/db/mappers/oracle/tenant.xml" />
        <mapper resource="com/mycomp/mob/db/mappers/oracle/functionenty.xml" />
    </mappers>
</configuration>

com.mycomp.mob.db.model包含租户和职能的POJO 用法如下:

      ITenantMapper mappper = sqlSessionFactory.openSession().getMapper(ItenantMapper.class)
      Tenant t = mapper.getTenant();

现在,只使用一个DB(在DB配置文件中配置为主数据库)。那么如何确保java mapper接口调用与该特定DB相对应的XML。 还需要知道我可以在mssql的mapper xmls里面配置相同的java mapper类名吗? 流程是否正确使用,或者我需要更改支持多个数据库的流程。

1 个答案:

答案 0 :(得分:0)

在Spring 1中为Oracle创建两个数据源和两个SessionFactories,另一个用于MSSQL。