MyBatis中多数据库支持---待续

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MyBatis中多数据库支持---待续

注意:该文章只是指明MyBatis怎么匹配多种数据库,而不是多数据源的实现

在实际项目开发中可能实现多数据开发,用MyBatis中的databaseIdProvider数据库标签可以直接配置多数据源,使用的时候可以直接在if标签上面根据databaseId来加载不同数据库的数据。

使用多数据源只要有按照如下步骤即可:

第一步

在mybatis-config.xml中加入databaseIdProvider配置即可

<databaseIdProvider type="DB_VENDOR">
    <property name="SQL Server" value="sqlserver"/>
    <property name="DB2" value="db2"/>
    <property name="Oracle" value="oracle"/>
    <property name="MySQL" value="mysql"/>
    <property name="PostgreSQL" value="ppostgresql"/>
    <property name="Derby" value="derby"/>
    <property name="HSQL" value="hsqldb"/>
    <property name="H2" value="h2"/>
</databaseIdProvider>
由于每个数据厂商对应数据库产品名称不同,这里的DB_VENDOR会通过DatabaseMetaData#getDatabaseProductName()返回的字符串进行设置,通常情况下都会比较长,所以通常会设置别名。如上代码设置了常见厂商的别名

第二步

配置了配置文件之后,我们需要对mapper映射文件中的需要加载其他数据库数据的标签进行设置。这里只演示like在MySQL和Oracle中的实现

  • MySQL
<select id="selectByUserToMySQL" resultType="com.echo.springmybatis.model.SysUserPo" databaseId="mysql">
    select
    id, user_name userName, user_password userPassword,
    user_email userEmail, user_info userInfo, head_img headImg,
    create_time createTime
    from sys_user
    <where>
        <if test="userName != null and userName != ''">
            <bind name="userName" value="'%' + userName + '%'"/>
            and user_name like concat('%', #{userName}, '%')
        </if>
        <if test="userEmail !='' and userEmail != null">
            and user_email = #{userEmail}
        </if>
    </where>
</select>
  • Oracle
<select id="selectByUserToOracle" resultType="com.echo.springmybatis.model.SysUserPo" databaseId="oracle">
    select
    id, user_name userName, user_password userPassword,
    user_email userEmail, user_info userInfo, head_img headImg,
    create_time createTime
    from sys_user
    <where>
        <if test="userName != null and userName != ''">
            <bind name="userName" value="'%' + userName + '%'"/>
            and user_name like '%'||#{userName}||'%')
        </if>
        <if test="userEmail !='' and userEmail != null">
            and user_email = #{userEmail}
        </if>
    </where>
</select>
  • 注意以上两种用法要配置对应的数据源,如果要项目中有数据源的切换,这里只需要按照如下写法即可,不需要更改xml代码
<select id="selectByUserToDatabase" resultType="com.echo.springmybatis.model.SysUserPo">
    select
    id, user_name userName, user_password userPassword,
    user_email userEmail, user_info userInfo, head_img headImg,
    create_time createTime
    from sys_user
    <where>
        <if test="userName != null and userName != ''">
            <if test="_databaseId == 'oracle'">
              and user_name like '%'||#{userName}||'%')
            </if>
            <if test="_databaseId == 'mysql'">
              and user_name like conat('%', #{userName}, '%')
            </if>
        </if>
        <if test="userEmail !='' and userEmail != null">
            and user_email = #{userEmail}
        </if>
    </where>
</select>
以上代码直接在关键部分使用if添加_databaseId来判断需要查询的是什么数据库,在有数据库切换的时候,能够有效的改善更改xml代码的操作。但是如果数据库切换很少,不建议这么使用,会增加很多冗余代码。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
224 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
1月前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
30 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
28天前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
229 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
77 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
4月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
4月前
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
|
4月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
396 0
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
77 3
|
5月前
|
数据库
MybatisPlus3---常用注解,驼峰转下滑线作为表明 cteateTime 数据表中的 cteate_time,@TableField,与数据库字段冲突要使用转义字符“`order`“,is
MybatisPlus3---常用注解,驼峰转下滑线作为表明 cteateTime 数据表中的 cteate_time,@TableField,与数据库字段冲突要使用转义字符“`order`“,is