Mybatis的資料庫選擇
阿新 • • 發佈:2018-12-25
如果想使用多個數據庫,配置檔案如下:
這是資料庫的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語句