1. 程式人生 > >Mybatis的資料庫選擇

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語句