Mybatis的数据库选择

来源:互联网 发布:热血江湖源码 编辑:程序博客网 时间:2024/06/17 00:25

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

这是数据库的properties文件

############ mysql ############jdbc.driver = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql:///hibernatejdbc.user = rootjdbc.password = 123############ oracle ############orcl.driver = oracle.jdbc.driver.OracleDriverorcl.url = jdbc:oracle:thin:@localhost:1521:orclorcl.user = scottorcl.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语句


原创粉丝点击