Mybatis的数据库选择

如果想使用多个数据库,配置文件如下:

这是数据库的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语句


猜你喜欢

转载自blog.csdn.net/Luke_R/article/details/78494253