ssm配置多数据库支持

         工作中遇到一个问题,就是使用mybatis的时候,要兼容多种数据库,要根据不同的数据库写不同的sql。

        在网上找了很多资料,一个是要求需要mybatis3.1.1及其以上版本。一个是和spring整合后不能直接配置mybatis.xml,而是要直接配置SqlSessionFactoryBean。

        打开SqlSessionFactoryBean我们能看到很多成员变量。


  private Resource configLocation;
  private Resource[] mapperLocations;
  private DataSource dataSource;
  private TransactionFactory transactionFactory;
  private Properties configurationProperties;
  private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  private SqlSessionFactory sqlSessionFactory;
  private String environment = SqlSessionFactoryBean.class.getSimpleName();
  private boolean failFast;
  private Interceptor[] plugins;
  private TypeHandler<?>[] typeHandlers;
  private String typeHandlersPackage;
  private Class<?>[] typeAliases;
  private String typeAliasesPackage;
  private Class<?> typeAliasesSuperType;
  private DatabaseIdProvider databaseIdProvider;
  private ObjectFactory objectFactory;
  private ObjectWrapperFactory objectWrapperFactory;

        我们可以看到DatabaseIdProvider,这个就是配置数据方言的。

        我们只要构造这个bean赋值给SqlSessionFactoryBean就可以使用了。DatabaseIdProvider只是个接口,我们直接找实现类,很容易找到VendorDatabaseIdProvider。这个类有一个成员变量Properties就是用来设置方言名字和值的。

    <bean id="vendorProperties"
          class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="properties">
            <props>
                <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>

        剩下的就是把对象赋值给SqlSessionFactoryBean

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="databaseIdProvider" ref="databaseIdProvider" />
        <property name="configLocation" value="classpath:SqlMapConfig.xml" />
        <property name="mapperLocations" value="classpath*:mapper/*.xml" />
    </bean>

        然后在编写mapper文件的时候就需要加databaseId就可以,这样在加载不同的数据库的时候就会加载不同的配置项。

 <select id="findAll" resultMap="result" databaseId="mysql"></select>

 

 

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值