如果想使用多个数据库,配置文件如下:
这是数据库的properties文件
############ mysql ############
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql:///hibernate
jdbc.user = root
jdbc.password = 123
############ oracle ############
orcl.driver = oracle.jdbc.driver.OracleDriver
orcl.url = jdbc:oracle:thin:@localhost:1521:orcl
orcl.user = scott
orcl.password = tiger
这是mybatis的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>
<properties resource="db_mysql.properties"/>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.anseon.pojo"/>
</typeAliases>
<!-- 配置使用某一数据库的环境,说明当前环境使用哪个数据库 -->
<environments default="dev_mysql">
<environment id="dev_mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="dev_oracle">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${orcl.driver}"/>
<property name="url" value="${orcl.url}"/>
<property name="username" value="${orcl.user}"/>
<property name="password" value="${orcl.password}"/>
</dataSource>
</environment>
</environments>
<!-- type、name、value是固定的,具体可以在mybatis官网教程中查阅 -->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
<mappers>
<mapper class="com.anseon.mapper.EmpMapper"/>
</mappers>
</configuration>
这是对应的mapper.xml文件中的使用
<select id="findEmpByNo" resultType="emp" databaseId="mysql">
select * from emp where empno = #{empno}
</select>
databaseId的值对应mybatis配置文件中databaseIdProvider的value值
有个需要注意的点:
如果mapper文件中有同样id的语句,如下
<select id="findEmpByNo" resultType="emp">
select empno from emp where empno = #{empno}
</select>
<select id="findEmpByNo" resultType="emp" databaseId="mysql">
select * from emp where empno = #{empno}
</select>
<select id="findEmpByNo" resultType="emp" databaseId="oracle">
select empno,ename lastName,sal salary from emp where empno = #{empno}
</select>
这时候应该执行哪句呢?
决定因素在于mybatis配置文件中的environments,如果默认使用mysql,就执行databaseId是mysql的,如果是使用Oracle,就执行databaseId是oracle的。如果有指定的databaseId,就不会执行什么都没有注明的语句。
这样就能够针对不同的数据库执行他能识别的sql语句