问题描述 Mybatis-Plus不支持国产数据库
错误信息 Mybatis Plus Cannot Read Database type or The Database's Not Supported! The Database's IDialect Not Supported! 解决方案 需要将mybatis-plus依赖包中的相关类反编译后替换
1、mybatis-plus-annotation-3.5.3.2.jar 包名:com.baomidou.mybatisplus.annotation
类名:DbType
修改为:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //
package com.baomidou.mybatisplus.annotation;
public enum DbType { MYSQL("mysql", "MySql数据库"), MARIADB("mariadb", "MariaDB数据库"), ORACLE("oracle", "Oracle11g及以下数据库(高版本推荐使用ORACLE_NEW)"), ORACLE_12C("oracle12c", "Oracle12c+数据库"), DB2("db2", "DB2数据库"), H2("h2", "H2数据库"), HSQL("hsql", "HSQL数据库"), SQLITE("sqlite", "SQLite数据库"), POSTGRE_SQL("postgresql", "Postgre数据库"), SQL_SERVER2005("sqlserver2005", "SQLServer2005数据库"), SQL_SERVER("sqlserver", "SQLServer数据库"), DM("dm", "达梦数据库"), XU_GU("xugu", "虚谷数据库"), KINGBASE_ES("kingbasees", "人大金仓数据库"), PHOENIX("phoenix", "Phoenix HBase数据库"), GAUSS("zenith", "Gauss 数据库"), CLICK_HOUSE("clickhouse", "clickhouse 数据库"), GBASE("gbase", "南大通用(华库)数据库"), GBASE_8S("gbase-8s", "南大通用数据库 GBase 8s"), /** @deprecated / @Deprecated GBASEDBT("gbasedbt", "南大通用数据库"), /* @deprecated */ @Deprecated GBASE_INFORMIX("gbase 8s", "南大通用数据库 GBase 8s"), SINODB("sinodb", "星瑞格数据库"), OSCAR("oscar", "神通数据库"), SYBASE("sybase", "Sybase ASE 数据库"), OCEAN_BASE("oceanbase", "OceanBase 数据库"), FIREBIRD("Firebird", "Firebird 数据库"), HIGH_GO("highgo", "瀚高数据库"), CUBRID("cubrid", "CUBRID数据库"), GOLDILOCKS("goldilocks", "GOLDILOCKS数据库"), CSIIDB("csiidb", "CSIIDB数据库"), SAP_HANA("hana", "SAP_HANA数据库"), IMPALA("impala", "impala数据库"), VERTICA("vertica", "vertica数据库"), XCloud("xcloud", "行云数据库"), REDSHIFT("redshift", "亚马逊redshift数据库"), OPENGAUSS("openGauss", "华为 opengauss 数据库"), TDENGINE("TDengine", "TDengine数据库"), INFORMIX("informix", "Informix数据库"), UXDB("uxdb", "优炫数据库"), LEALONE("lealone", "Lealone数据库"), SUNDB("SUNDB","SUNDB数据库"), OTHER("other", "其他数据库");
}
2、mybatis-plus-extension-3.5.3.2.jar 2.1增加类 2.1.1SUNDBKeyGenerator 包名:com.baomidou.mybatisplus.extension.incrementer
类名:SUNDBKeyGenerator
package com.baomidou.mybatisplus.extension.incrementer;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
/**
- @version V1.0
- @Description: (用一句话描述该文件做什么)
- @author: qixiongfei
- @date: 2024/5/21 16:50 */ public class SUNDBKeyGenerator implements IKeyGenerator { public SUNDBKeyGenerator() { }
public String executeSql(String incrementerName) { return "SELECT " + incrementerName + ".NEXTVAL FROM DUAL"; }
public DbType dbType() { return DbType.SUNDB; } }
2.1.2SUNDBDialect 包名:com.baomidou.mybatisplus.extension.plugins.pagination.dialects
类名:SUNDBDialect
package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
/**
- @version V1.0
- @Description: (用一句话描述该文件做什么)
- @author: qixiongfei
- @date: 2024/5/21 16:43 */ public class SUNDBDialect extends OracleDialect { } 2.2修改类 2.2.1DialectFactory 包名:com.baomidou.mybatisplus.extension.plugins.pagination
类名:DialectFactory
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //
package com.baomidou.mybatisplus.extension.plugins.pagination;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.*;
import java.util.EnumMap; import java.util.Map;
public class DialectFactory { private static final Map<DbType, IDialect> DIALECT_ENUM_MAP = new EnumMap(DbType.class);
}
2.2.2JdbcUtils 包名:com.baomidou.mybatisplus.extension.toolkit
类名:JdbcUtils
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //
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.CollectionUtils; 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.function.Function; 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();