Mybatis中使用databaseIdProvider支持多数据库支持

我们如何让mybatis更好的同时支持多数据的操作。在更换数据库时无需做更多的操作,只需修改一下mybatis的核心配置文件既可
pom文件

 <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.4.0-atlassian-hosted</version>
    </dependency>

mybatis配置文件

<?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>
         <!-- 读取jdbc.properties属性文件-->
    <properties resource="jdbc.properties"/>

    <typeAliases>
        <package name="com.zxf.pojo"/>
    </typeAliases>
    <!--环境配置-->
    
    <environments default="mysql_1"> <!--用那个数据库就写那个数据库的ID -->
        <environment id="mysql_1"><!--mysql的ID -->
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

        <environment id="oracle_1">  <!--Oracle的ID -->
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${oracle.driver}"/>
                <property name="url" value="${oracle.url}"/>
                <property name="username" value="${oracle.user}"/>
                <property name="password" value="${oracle.pwd}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 定义多数据库支持-->
    <databaseIdProvider type="DB_VENDOR">
        <property name="MySQL" value="mysql"/> <!--mysql的定义 -->
        <property name="Oracle" value="oracle"/><!--oracle的定义 -->
        <property name="SQL Server" value="sqlserver"/>
    </databaseIdProvider>
    <!-- 引入映射-->
    <mappers>
        <mapper resource="mappers/EmployeeMapper.xml"/>
    </mappers>
</configuration>

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.0.148:3306/test
jdbc.username=root
jdbc.password=abc123

oracle.driver=oracle.jdbc.OracleDriver
oracle.url=jdbc:oracle:thin:@localhost:1521:orcl
oracle.user=scott
oracle.pwd=abc123

pojo类

package com.zxf.pojo;


public class Employee {
    private String emp_no;
    private String emp_name;

    public String getEmp_name() {
        return emp_name;
    }

    public void setEmp_name(String emp_name) {
        this.emp_name = emp_name;
    }

    public String getEmp_no() {

        return emp_no;
    }

    public void setEmp_no(String emp_no) {
        this.emp_no = emp_no;
    }
}

Mapper接口

package com.zxf.mapper;

import com.zxf.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {
    public List<Employee> getAll();
    public Employee getByIdEmp(String emp_no);
}

Mapper映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zxf.mapper.EmployeeMapper">
  <select id="getAll" resultType="employee" databaseId="mysql"> <!-- 引用mysql的定义-->
         select * from employee_basic
     </select>
 <select id="getAll" resultType="employee" databaseId="oracle"><!-- 引用oracle的定义-->
        select ENAME emp_name     from emp
    </select>
    <select id="getByIdEmp" resultType="employee">
        select * from employee_basic where emp_no=#{emp_no}
    </select>
</mapper>

最后测试运行的时候,如果要切换数据库;修改这里就可以了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhang6132326/article/details/106482261