12、databaseIdProvider多数据库支持
来源:互联网 发布:成都淘宝代运营 编辑:程序博客网 时间:2024/06/11 01:08
databaseIdProvider官方描述
MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。 为支持多厂商特性只要像下面这样在 mybatis-config.xml 文件中加入 databaseIdProvider 即可:
<databaseIdProvider type="DB_VENDOR" />
例如MySQL的获取系统时间函数 NOW() 和Oracle的获取系统时间to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) 是不同的。那么我们可以针对同一个修改可以写两个update语句,他们的databaseId属性不一样。
这里的 DB_VENDOR 会通过 DatabaseMetaData#getDatabaseProductName() 返回的字符串进行设置 见JDBC-基础。 由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其变短,如下:
<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle" /></databaseIdProvider>
你可以通过实现接口 org.apache.ibatis.mapping.DatabaseIdProvider 并在 mybatis-config.xml 中注册来构建自己的 DatabaseIdProvider:
public interface DatabaseIdProvider { void setProperties(Properties p); String getDatabaseId(DataSource dataSource) throws SQLException;}
mysql和oracle两种数据库的应用实例
首先配置 mybatis-config.xml
<properties resource="jdbc.properties" /> <environments default="dev"> <environment id="dev"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <databaseIdProvider type="DB_VENDOR"> <property name="MySQL" value="mysql" /> <property name="Oracle" value="oracle" /> </databaseIdProvider> <mappers> <mapper class="com.elements.user.dao.dbMapper" /> </mappers>
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.elements.user.dao.dbMapper" > <select id="SelectTime" resultType="String" databaseId="mysql"> SELECT NOW() FROM dual </select> <select id="SelectTime" resultType="String" databaseId="oracle"> SELECT 'oralce'||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual </select></mapper>
测试类
public class TestDB { @Test public void Testdb() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); SqlSession session = sqlSessionFactory.openSession(); try { dbMapper user = (dbMapper) session .getMapper(dbMapper.class); System.out.println(user.SelectTime()); } finally { session.close(); } }}
配置文件的源码解析
private void databaseIdProviderElement(XNode context) throws Exception { DatabaseIdProvider databaseIdProvider = null; if (context != null) { String type = context.getStringAttribute("type"); // awful patch to keep backward compatibility if ("VENDOR".equals(type)) { type = "DB_VENDOR"; } Properties properties = context.getChildrenAsProperties(); databaseIdProvider = (DatabaseIdProvider) resolveClass(type).newInstance(); databaseIdProvider.setProperties(properties); } //如果配置了环境、就把databaseId设置到环境中区 Environment environment = configuration.getEnvironment(); if (environment != null && databaseIdProvider != null) { String databaseId = databaseIdProvider.getDatabaseId(environment.getDataSource()); configuration.setDatabaseId(databaseId); } }
阅读全文
0 0
- 12、databaseIdProvider多数据库支持
- MyBatis之databaseIdProvider多数据库支持
- mybatis中databaseIdProvider支持多数据库配置详解
- 支持多数据库
- Hibernate支持多数据库
- Mybatis多数据库支持
- Spring+Mybatis多数据源配置(二)——databaseIdProvider的使用
- Spring+Mybatis多数据源配置(二)——databaseIdProvider的使用
- 多数据库支持类库
- 多数据库支持的应用程序设计
- 多数据库支持的应用程序设计
- 多数据库支持的应用程序设计
- mybatis的多数据库支持
- Mybatis 3.1.1支持多数据库
- Mybatis支持连接多数据库
- StringBoot多数据源支持
- 使用反射实现多数据库的支持
- 一种软件多数据库支持实现方式介绍
- 两个元素交换,粗心导致的BUG!!!
- spring -boot的jre版本问题Java.lang.UnsupportedClassVersionError: org/apache/nutch/crawl/Crawl3 : Unsuppor
- 11、配置环境(environments)
- C#中ColorDialog需点两次确定才会退出的问题
- spark2.x---2. SparkContext构成与初始化
- 12、databaseIdProvider多数据库支持
- u-boot第二阶段分析(二)
- 实战
- 分布式锁设计
- java程序员常犯的10个错误
- 机器学习——Octave语法
- hiho-hihoCoder挑战赛29-B-快速乘法
- git 本地与远程的链接
- 飞思卡尔i.MX 6Quad Android 4.2.2的LVDS屏幕驱动移植