【YashanDB数据库】Mybatis-plus分页框架识别不到Yashandb

简介: Mybatis-plus分页框架识别不到Yashandb

问题描述
Mybatis-plus 无法识别Yashandb数据库,应用有如下报错。

问题分析
从Mybatis-plus源码里面看到,getDBtype函数是没有Yashandb的方言。

当Yashandb使用mybatis-plus分页时候,会抛出异常即other database not supported。

package com.baomidou.mybatisplus.extension.toolkit;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;

public class JdbcUtils {
private static final Log logger = LogFactory.getLog(JdbcUtils.class);
private static final Map JDBC_DB_TYPE_CACHE = new ConcurrentHashMap();

public JdbcUtils() {
}

public static DbType getDbType(Executor executor) {
    try {
        Connection conn = executor.getTransaction().getConnection();
        return (DbType)JDBC_DB_TYPE_CACHE.computeIfAbsent(conn.getMetaData().getURL(), JdbcUtils::getDbType);
    } catch (SQLException var2) {
        throw ExceptionUtils.mpe(var2);
    }
}

public static DbType getDbType(String jdbcUrl) {
    Assert.isFalse(StringUtils.isBlank(jdbcUrl), "Error: The jdbcUrl is Null, Cannot read database type", new Object[0]);
    String url = jdbcUrl.toLowerCase();
    if (!url.contains(":mysql:") && !url.contains(":cobar:")) {
        if (url.contains(":mariadb:")) {
            return DbType.MARIADB;
        } else if (url.contains(":oracle:")) {
            return DbType.ORACLE;
        } else if (!url.contains(":sqlserver:") && !url.contains(":microsoft:")) {
            if (url.contains(":sqlserver2012:")) {
                return DbType.SQL_SERVER;
            } else if (url.contains(":postgresql:")) {
                return DbType.POSTGRE_SQL;
            } else if (url.contains(":hsqldb:")) {
                return DbType.HSQL;
            } else if (url.contains(":db2:")) {
                return DbType.DB2;
            } else if (url.contains(":sqlite:")) {
                return DbType.SQLITE;
            } else if (url.contains(":h2:")) {
                return DbType.H2;
            } else if (regexFind(":dm\\d*:", url)) {
                return DbType.DM;
            } else if (url.contains(":xugu:")) {
                return DbType.XU_GU;
            } else if (regexFind(":kingbase\\d*:", url)) {
                return DbType.KINGBASE_ES;
            } else if (url.contains(":phoenix:")) {
                return DbType.PHOENIX;
            } else if (url.contains(":zenith:")) {
                return DbType.GAUSS;
            } else if (url.contains(":gbase:")) {
                return DbType.GBASE;
            } else if (!url.contains(":gbasedbt-sqli:") && !url.contains(":informix-sqli:")) {
                if (url.contains(":clickhouse:")) {
                    return DbType.CLICK_HOUSE;
                } else if (url.contains(":oscar:")) {
                    return DbType.OSCAR;
                } else if (url.contains(":sybase:")) {
                    return DbType.SYBASE;
                } else if (url.contains(":oceanbase:")) {
                    return DbType.OCEAN_BASE;
                } else if (url.contains(":highgo:")) {
                    return DbType.HIGH_GO;
                } else if (url.contains(":cubrid:")) {
                    return DbType.CUBRID;
                } else if (url.contains(":goldilocks:")) {
                    return DbType.GOLDILOCKS;
                } else if (url.contains(":csiidb:")) {
                    return DbType.CSIIDB;
                } else if (url.contains(":sap:")) {
                    return DbType.SAP_HANA;
                } else if (url.contains(":impala:")) {
                    return DbType.IMPALA;
                } else if (url.contains(":vertica:")) {
                    return DbType.VERTICA;
                } else if (url.contains(":xcloud:")) {
                    return DbType.XCloud;
                } else if (url.contains(":firebirdsql:")) {
                    return DbType.FIREBIRD;
                } else {
                    logger.warn("The jdbcUrl is " + jdbcUrl + ", Mybatis Plus Cannot Read Database type or The Database's Not Supported!");
                    return DbType.OTHER;
                }
            } else {
                return DbType.GBASE_8S;
            }
        } else {
            return DbType.SQL_SERVER2005;
        }
    } else {
        return DbType.MYSQL;
    }
}

public static boolean regexFind(String regex, CharSequence input) {
    return null == input ? false : Pattern.compile(regex).matcher(input).find();
}
AI 代码解读

}
解决办法
办法1:

添加java配置类,业务系统指定ORM框架需要使用Oracle(MySQL)方言

package com.sics.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE));
return interceptor;
}

目录
打赏
0
0
0
0
98
分享
相关文章
一文拆解 YashanDB Cloud Manager,数据库运维原来还能这么“智能”!
传统数据库运维依赖人工,耗时耗力还易出错。YashanDB Cloud Manager(YCM)作为“智能运维管家”,实现主动、智能、可视化的运维体验。它提供实时资源监控、智能告警系统、自动巡检机制、高可用架构支持和强大的权限管理功能,帮助用户统一管理多实例与集群,减少人工干预,构建现代化数据库运维体系,让企业高效又安心地运行数据库服务。
用 YashanDB Migration Platform,数据库迁移不再是“高风险动作”
数据库迁移一直是企业信息化中的难题,耗时长、风险高。YashanDB Migration Platform(YMP)提供一站式解决方案,涵盖评估、改写、迁移与校验全流程。其核心能力包括SQL自动适配、智能对象迁移、高性能数据通道及数据对比校验,显著降低人力成本与业务风险。适合从Oracle、MySQL等迁移到YashanDB的企业,以及需异构整合或国产化替代的集团、政府和国企项目。YMP不仅是工具,更是推动数据库国产化的关键平台。
YashanDB数据库服务端SSL连接配置
YashanDB支持通过SSL连接确保数据传输安全,需在服务端生成根证书、服务器证书及DH文件,并将根证书提供给客户端以完成身份验证。服务端配置包括使用OpenSSL工具生成证书、设置SSL参数并重启数据库;客户端则需下载根证书并正确配置环境变量与`yasc_env.ini`文件。注意:启用SSL后,所有客户端必须持有根证书才能连接,且SSL与密码认证独立运行。
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
105 13
【YashanDB 知识库】ycm 托管数据库时报错 OM host ip:127.0.0.1 is not support join to YCM
在托管数据库时,若 OM 的 IP 被设置为 127.0.0.1,将导致无法托管至 YCM,并使数据库失去监控。此问题源于安装时修改了 OM 的监听 IP。解决方法包括:将 OM 的 IP 修改为本机实际 IP 或 0.0.0.0,同时更新 env 文件及 yasom 后台数据库中的相关配置。经验总结指出,应避免非必要的后台 IP 修改,且数据库安装需遵循规范,不使用仅限本机访问的 IP(如 127.0.0.1)。
风险防不胜防?看 YashanDB 如何守护你的数据库安全(上篇)
数据库作为信息系统核心,其安全性至关重要。本文聚焦数据库安全机制中的访问管理,涵盖身份认证、访问控制与反入侵措施。YashanDB通过口令认证、操作系统认证及双因素认证确保用户身份安全;实施基于角色(RBAC)和标签(LBAC)的访问控制,实现权限精细化管理;同时利用黑白名单与连接监听机制防范未授权访问和恶意攻击。这些措施共同保障数据的机密性、完整性和可用性,助力企业满足国家合规要求。下期将探讨威胁检测与数据保护内容,敬请期待!
数据库国产化选型?YashanDB 给中大型企业的五个答案
近两年,“国产数据库”成为企业数字化升级的重要议题。YashanDB作为新一代国产关系型数据库,以完整产品矩阵解决企业核心关切:通过图形化工具提升开发效率;提供自动化迁移平台简化数据库切换;云管理工具减轻运维负担;支持复杂业务场景;拥有成熟团队保障企业级服务。YashanDB不仅是“可替代”,更是“更可靠”的选择,助力企业实现高效、可控的数据库升级。
风险防不胜防?看 YashanDB 如何守护你的数据库安全(下篇)
本文深入探讨数据库安全机制中的威胁监测与数据保护。在威胁监测方面,YashanDB 提供权限、行为和角色审计功能,支持异步审计降低性能影响,并通过安全漏洞扫描和硬件防护减少漏洞危害。数据保护部分涵盖通信加密(支持国密标准)、存储加密(表空间透明加密TDE)、备份加密及密钥管理等关键技术。此外,YashanDB 支持热备、增量备份和按时间点恢复,并实现安全销毁防止信息泄露,全面保障数据的机密性、完整性和可用性。
【YashanDB 知识库】ycm 托管数据库时,数据库非 OM 安装无法托管
本文主要介绍了因数据库未按规范使用 yasboot 安装导致的问题及解决方法。问题表现为无 yasom 和 yasagent 进程,且目录结构缺失,致使 ycm 无法托管与监控。分析发现可能是数据库版本旧或安装不规范引起。解决方法为先生成配置文件,安装 yasom 和 yasagent,再生成并修改托管配置模板,最终通过命令完成托管至 yasom 和 ycm。总结强调了按规范安装数据库的重要性以避免类似问题。
开发YashanDB数据库?用 DBeaver for YashanDB 更顺手
数据库开发复杂易错,尤其在企业级场景中。为提升效率,YashanDB 团队基于 DBeaver 开源工具打造专属解决方案——DBeaver for YashanDB。它支持多类型数据库对象管理(表、视图、函数等),适配 YashanDB 特有表结构(HEAP、LSC),提供智能补全、语法高亮、SQL 调试等功能,让开发更高效流畅。推荐用于数据库应用开发团队、高频调试用户及中大型企业统一工具栈场景。

热门文章

最新文章