springboot + mybatis支持多数据库

当在业务服务中需要支持多数据库时,虽然尽量使用标准sql,但还是难免出现多数据库不兼容的情况。例如对于达梦数据库在like时对于匹配字符串中的如果有通配符_或%需要转义改写为\_或\%,这在mysql、oracle、sql server都是没有问题的,但在达梦数据库中需要在之后加ESCAPE '\'才行。这时就需要能够知道当前连接的数据库是那种,如果是达梦数据库需要使用这种模式like #{var1} ESCAPE ‘\’

创建DatabaseIdProvider bean设置各数据库的别名

    /**
     * 自动识别使用的数据库类型,注意,此处的key为驱动自带的驱动名,不能更改,value可以更改
     * 在mapper.xml中_databaseId的值就是跟这里对应
     */
    @Bean
    public DatabaseIdProvider databaseIdProvider() {
        DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
        Properties properties = new Properties();
        //key为固有名字,更改后无法匹配,后面的value可以自定义
        properties.setProperty("Oracle", "oracle");
        properties.setProperty("MySQL", "mysql");
        properties.setProperty("DB2", "db2");
        properties.setProperty("Derby", "derby");
        properties.setProperty("H2", "h2");
        properties.setProperty("HSQL", "hsql");
        properties.setProperty("Informix", "informix");
        properties.setProperty("MS-SQL", "ms-sql");
        properties.setProperty("PostgreSQL", "postgresql");
        properties.setProperty("Sybase", "sybase");
        properties.setProperty("Hana", "hana");
        properties.setProperty("DM DBMS", "dm");
        properties.setProperty("Microsoft SQL Server", "mss");
        databaseIdProvider.setProperties(properties);
        return databaseIdProvider;
    }
  • 属性配置的key是数据库的产品名,可以通过如下方式获取到
String databaseProductName = connection.getMetaData().getDatabaseProductName();
  • 配置属性的value对应给数据库产品设置的别名。此别名的值对应到mybatis的内置参数_databaseId

在mapper.xml中判断当前连接的数据库使用特定sql

 <if test="_databaseId == 'dm'">
    AND rtt.table_name LIKE #{tableNameLike} ESCAPE '\'
</if>
<if test="_databaseId != 'dm'">
    AND rtt.table_name LIKE #{tableNameLike}
</if>

相关推荐

  1. springboot + mybatis支持数据库

    2024-04-03 07:56:03       14 阅读
  2. Spring Boot 如何支持数据

    2024-04-03 07:56:03       36 阅读
  3. 数据源 - dynamic-datasource | 事务支持

    2024-04-03 07:56:03       21 阅读
  4. Mybatis 动态 SQL - script,bind,数据库支持

    2024-04-03 07:56:03       37 阅读
  5. springboot数据支持自定义连接池

    2024-04-03 07:56:03       39 阅读
  6. hive分隔符外表支持

    2024-04-03 07:56:03       33 阅读
  7. shell 支持线程

    2024-04-03 07:56:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 07:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 07:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 07:56:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 07:56:03       20 阅读

热门阅读

  1. 【Python进阶(五)】——模块搜索及工作目录

    2024-04-03 07:56:03       12 阅读
  2. Quill文档(四):使用Parchment克隆Medium

    2024-04-03 07:56:03       11 阅读
  3. 如何在 Ubuntu 12.04 上添加交换空间

    2024-04-03 07:56:03       12 阅读
  4. 抖音小程序中跳转页面怎么写?

    2024-04-03 07:56:03       20 阅读
  5. 全栈的自我修养 ———— uniapp中封装api请求

    2024-04-03 07:56:03       12 阅读
  6. vue-uniapp的页面参数

    2024-04-03 07:56:03       14 阅读
  7. 阿里云python-SDK配置

    2024-04-03 07:56:03       9 阅读