MyBatis(三)全局配置文件 之 databaseProvider 数据库厂商标识

摘要:
也可以实现DatabaseIdProvider接口来定义。DB_VENDOR会通过DatabaseMetaData#getDatabaseProductName()返回的字符串进行设置。作用就是得到数据库厂商的标识,mybatis就能根据数据库厂商标识来执行不同的sql;常用的数据厂商标识:MySQL,Oracle,SQLServerProperty-name:数据库厂商标识  Property-value:为标识起一个别名,方便SQL语句使用databaseId属性引用三、如何使用1、在核心配置文件中配置databaseIdProvider˂!如果同时找到带有databaseId和不带databaseId的相同语句,则后者会被舍弃。
databaseIdProvider环境

一、databaseIdProvider 属性

MyBatis可以根据不同的数据库厂商执行不同的语句

<databaseIdProvider type="DB_VENDOR">
        <!-- 为不同的数据库厂商起别名 -->
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>
        <property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>

二、Type

Type:DB_VENDOR
使用MyBatis提供的VendorDatabaseIdProvider解析数据库厂商标识。也可以实现DatabaseIdProvider接口来定义。
DB_VENDOR
会通过DatabaseMetaData#getDatabaseProductName()返回的字符串进行设置。由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其变短。
作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql;
常用的数据厂商标识:MySQL,Oracle,SQL Server
Property-name:数据库厂商标识
  Property-value:为标识起一个别名,方便 SQL 语句使用 databaseId 属性引用

三、如何使用

1、在核心配置文件中配置 databaseIdProvider

<databaseIdProvider type="DB_VENDOR">
        <!--为不同的数据库厂商起别名      -->
        <property name="MySQL"value="mysql"/>
        <property name="SQL Server"value="sqlserver"/>
        <property name="DB2"value="db2"/>
        <property name="Oracle"value="oracle" />
</databaseIdProvider>

2、在映射文件中使用

在SQL映射文件中的增删改查标签中使用databaseId来指定数据库标识的别名
<select id="getEmpById"resultType="com.njf.mybatis.bean.Employee">select * from tbl_employee where id = #{id}
</select>

<select id="getEmpById"resultType="com.njf.mybatis.bean.Employee"databaseId="mysql">select * from tbl_employee where id = #{id}
</select>

<select id="getEmpById"resultType="com.njf.mybatis.bean.Employee"databaseId="oracle">select EMPLOYEE_ID id,LAST_NAME    lastName,EMAIL email
        from employees where EMPLOYEE_ID=#{id}
</select>

3、切换数据库环境

dbconfig.properties 配置文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456


orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
orcl.username=scott
orcl.password=123456

切换数据库环境:

<environments default="dev_mysql">切换mysql或Oracle数据库环境
        <environment id="dev_mysql">
            <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="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.username}" />
                <property name="password"value="${orcl.password}" />
            </dataSource>
        </environment>
</environments>

4、MyBatis匹配规则如下:

(1)如果没有配置databaseIdProvider标签,那么databaseId=null
(2)如果配置了databaseIdProvider标签,使用标签配置的name去匹配数据库信息,匹配上设置databaseId=配置指定的值,否则依旧为null
(3)如果databaseId不为null,他只会找到配置databaseId的sql语句
(4)MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库databaseId 属性的所有语句。如果同时找到带有 databaseId 和不带databaseId 的相同语句,则后者会被舍弃

免责声明:文章转载自《MyBatis(三)全局配置文件 之 databaseProvider 数据库厂商标识》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CPU-bound(计算密集型) 和I/O bound(I/O密集型)/数据密集型Linux进程内存分析pmap命令(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringMVC加载配置Properties文件的几种方式

最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定、URL映射的文章都很多了,写这篇博客主要总结一下SpringMVC加载配置Properties文件的几种方式 1.通过context:property-placeholde实现配置文件加载   1.1、在...

Asp.Net mvc4 项目 在vs中调试正常 在IIS发布后连接oracle数据库时提示数据库连接关闭

解决办法: 1、打开iis,找到发布的程序 2、右键单击“TAKANAPP” 从右键菜单选择“管理应用程序”--“高级设置....” 在打开的高级设置  面板 查看对应的应用程序池 名称 3、设置应用程序池 从右键菜单中选择“设置应用程序池默认设置...” 在打开的对话框中设置“标识”的值...

sql 数据库实时增量更新

---一下sql可以添加到作业中每秒执行一次   数据过多会消耗性能    --数据表如下,其中字段pid mid time price_type是一个组合主键--pid mid time price price_type uid insert into 增量更新2( pid, mid, times, price, price_type, uid ) s...

SqlServer数据库主从同步

分发/订阅模式实现SqlServer主从同步 在文章开始之前,我们先了解一下几个关键的概念: 分发服务器分发服务器是负责存储在同步过程中所用复制信息的服务器。可以比喻成报刊发行商。 分发数据库分发数据库用于存储发布数据库所做的更改。它还可以存储快照和合并发布的历史信息。存在于系统数据库中,默认为destribution. 发布服务器使服务器能够成为发布...

oracle数据库tns配置方法详解

NS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器。 TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下...

解决 MySQL 不输入用户和密码也连接成功的问题

前言 MySQL 5.6.46 版本 分析 数据库安装并启动后,通过 root 账号登录(此时可不用输密码)在mysql 库中可以看到 user 表中的数据如下: 4 条初始记录中的密码字段都为空字符串,且有 1 条记录用户名字段也为空串 用户名与密码字段都为空串说明不用输入用户名密码也可以连接(输入其他字符则连接失败) 用户名字段存在,但密码字段为空...