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

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

时间:2024-08-08 16:18:32浏览次数:15  
标签:YashanDB url contains else DbType plus import Mybatis return

问题描述

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<String, DbType> 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();
    }
}

解决办法

办法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;
    }

标签:YashanDB,url,contains,else,DbType,plus,import,Mybatis,return
From: https://www.cnblogs.com/YashanDB/p/18349144

相关文章

  • 【YashanDB数据库】PHP无法通过ODBC连接到数据库
    【问题分类】驱动使用【关键字】ODBC、驱动使用、PHP【问题描述】应用使用php-fpm+nginx架构,通过php的ODBC拓展连接YashanDB时出现报错:[unixODBC][DriverManager]Can'topenlib'/home/yashandb_odbc/libyas_odbc.so':filenotfound但是在应用所在的主机上使用isql连接Ya......
  • 【YashanDB数据库】由于网络带宽不足导致的jdbc向yashandb插入数据慢
    问题现象某客户环境,客户的业务使用jdbc驱动向其他操作系统上的yashandb插入90万条数据,耗时大约30分钟。问题的风险及影响影响客户的业务处理效率问题影响的版本所有的yashandb版本问题发生原因jdbc执行batchinsert时,是有绑定变量的。在准备好了PreparedStatement以后,jdbc......
  • Mybatis-Plus实现字段的自动填充
    给字段加注解@ApiModelProperty(value="创建人")@TableField(fill=FieldFill.INSERT)privateStringcreateBy;@ApiModelProperty(value="修改人")@TableField(fill=FieldFill.INSERT_UPDATE)privateStringupdateBy;实现MetaObjectHandlerimportco......
  • Mybatis详解
    MyBatis一、MyBatis概述1.MyBatis介绍2.依赖介绍二、工程搭建1.工程依赖2.配置文件3.映射文件4.MybatisAPISqlSession直接执行SQL5.代理实例三、配置文件1.属性(properties)2.设置(settings)3.类型别名(typeAliases)4.类型处理器(typeHandlers)常见类型......
  • 4K Video Downloader Plus 中文 授权版
    4KVideoDownloader是一款专门为帮助您从不同的视频网站下载高清视频的软件工具(极速下载站提供),该应用程序为用户提供了将视频保存到FLV,MP4,MKV或3GP的可能性。它拥有直观,整洁的布局,允许用户随时随地执行多项操作。您可以将URL直接粘贴到主面板中,并根据其流类型选择视频质量。此......
  • 4K Video Downloader Plus 中文 授权版
    4KVideoDownloader是一款专门为帮助您从不同的视频网站下载高清视频的软件工具(极速下载站提供),该应用程序为用户提供了将视频保存到FLV,MP4,MKV或3GP的可能性。它拥有直观,整洁的布局,允许用户随时随地执行多项操作。您可以将URL直接粘贴到主面板中,并根据其流类型选择视频质量。此......
  • MyBatis-Plus 条件构造器
    MyBatis-Plus条件构造器        MyBatis-Plus的条件构造器(Wrapper)是MyBatis-Plus提供的一个非常强大的功能,它允许你以链式调用的方式构建复杂的SQL查询条件,而无需手写繁琐的XML映射文件或注解。主要特点链式调用:通过链式调用的方式构建查询条件,代码可读性高......
  • 基于Vue2+ElementUI/Vue3+ElementPlus对el-notification增加倒计时进度条特效,鼠标移入
    遇到一个需求就是对这个el-notification加一个倒计时进度条,方便用户知道该通知何时自动关闭。一、示例代码(1)基于Vue2+ElementUI的项目<template><div><el-button@click="showTip">doit</el-button></div></template><script>exportdefault{......
  • mybatis-plus
    <!--导入包--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency> <!--新建类-->@Configuration@MapperScan(&q......
  • 【项目实战】在 MyBatis Plus 中添加 `@TableLogic` 注解,以实现逻辑删除
    一,需求描述在MyBatisPlus中实现逻辑删除是一种常见的需求逻辑删除,通常用于避免直接从数据库中物理删除数据,而是标记这些数据为“已删除”。逻辑删除,可以通过在表中添加一个额外的字段(如deleted或is_deleted)来实现。逻辑删除,当该字段为某个值时(例如1或者true),表示这......