SpringBoot兼容人大金仓数据库

最近公司要将系统进行国产化数据库人大金仓的适配,在适配过程中发现了许多问题,在此记录
1、引入依赖
根据安装的数据库版本决定需要引入对应的驱动版本和数据库方言,我们安装的是kingbaseESV8版本,所以我们引入8.2.0的驱动,我们是将jar包推到私服上的,所以直接通过依赖引入

		<dependency>
			<groupId>com.esen.jdbc</groupId>
			<artifactId>kingbasejdbc4</artifactId>
			<version>8.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate.dialect</groupId>
			<artifactId>KingbaseDialect</artifactId>
			<version>1.0</version>
		</dependency>

https://pan.baidu.com/s/1PLsbXPoDXzji8ToEgD_eNA
提取码:qwer
2、配置数据库连接信息和数据库方言

#KINGBASE
orm.database=
orm.databasePlatform=org.hibernate.dialect.KingbaseDialect

# 人大金仓
spring.datasource.driverClassName=com.kingbase8.Driver
spring.datasource.url=jdbc:kingbase8://localhost:54321/TEST
spring.datasource.username=SYSTEM
spring.datasource.password=123456

3、自动建表问题
引用的Hibernate5.6.9版本,自动建表时会进行元数据的提取
在这里插入图片描述
在这里插入图片描述
默认为null,而KingbaseDialect中有具体返回,所以会执行后续的元数据提取操作

在这里插入图片描述
在这里插入图片描述
提取元数是从设置的QuerySequencesString中设置的sql执行查询后从结果中提取sequence_name,sequence_catalog,sequence_schema等信息,如果为空,则会抛出异常:The column name sequence_catalog was not found in this ResultSet

public Iterable<SequenceInformation> extractMetadata(ExtractionContext extractionContext) throws SQLException {
        String lookupSql = extractionContext.getJdbcEnvironment().getDialect().getQuerySequencesString();
        return lookupSql == null ? SequenceInformationExtractorNoOpImpl.INSTANCE.extractMetadata(extractionContext) : (Iterable)extractionContext.getQueryResults(lookupSql, (Object[])null, (resultSet) -> {
            IdentifierHelper identifierHelper = extractionContext.getJdbcEnvironment().getIdentifierHelper();
            ArrayList sequenceInformationList = new ArrayList();

            while(resultSet.next()) {
                sequenceInformationList.add(new SequenceInformationImpl(new QualifiedSequenceName(identifierHelper.toIdentifier(this.resultSetCatalogName(resultSet)), identifierHelper.toIdentifier(this.resultSetSchemaName(resultSet)), identifierHelper.toIdentifier(this.resultSetSequenceName(resultSet))), this.resultSetStartValueSize(resultSet), this.resultSetMinValue(resultSet), this.resultSetMaxValue(resultSet), this.resultSetIncrementValue(resultSet)));
            }

            return sequenceInformationList;
        });
    }

protected String sequenceNameColumn() {
        return "sequence_name";
    }

    protected String sequenceCatalogColumn() {
        return "sequence_catalog";
    }

    protected String sequenceSchemaColumn() {
        return "sequence_schema";
    }

    protected String sequenceStartValueColumn() {
        return "start_value";
    }

    protected String sequenceMinValueColumn() {
        return "minimum_value";
    }

    protected String sequenceMaxValueColumn() {
        return "maximum_value";
    }

    protected String sequenceIncrementColumn() {
        return "increment";
    }

在这里插入图片描述
解决方案
1、降低Hibernate版本,5.1.0版本执行提取元数据操作时,是加入空的Identifier对象,所以不会报此错误。
2、重写方言的getQuerySequencesString方法,直接返回null,因为通过对比发现mysql的方言并没有重写此方法,所以认为此处返回null,然后不进行元数据提取不会产生影响,经测试能成功建表

public class KunKingbaseDialect extends KingbaseDialect {
    public KunKingbaseDialect() {
        super();
    }

    @Override
    public String getQuerySequencesString() {
        return null;
    }
}
要实现Spring Boot整合人大金仓数据库,可以按照以下步骤进行操作: 1. 创建一个Spring Boot项目,并在主类App上添加@SpringBootApplication注解。同时,使用@MapperScan注解指定需要扫描的mapper包路径,例如kingdb.mapper。这样可以让Spring Boot自动扫描和加载mapper接口。 2. 添加人大金仓数据库的依赖。根据引用的描述,可以使用MyBatisPlus适配人大金仓数据库。在项目的pom.xml文件中,添加相应的依赖。确保版本与实际使用的人大金仓数据库版本匹配。 3. 配置人大金仓数据库的连接信息。在application.properties或application.yml文件中,配置人大金仓数据库的连接信息,包括数据库URL、用户名、密码等。 4. 创建实体类和Mapper接口。根据业务需求,在对应的包下创建实体类和Mapper接口。实体类定义与人大金仓数据库中表对应的字段,Mapper接口定义数据库操作的方法。 5. 编写Mapper.xml文件。根据Mapper接口中的方法,在resources目录下创建与Mapper接口同名的Mapper.xml文件,编写SQL语句。 6. 在Service层或Controller层中使用人大金仓数据库的操作。根据业务需求,在Service层或Controller层中调用Mapper接口的方法,完成对人大金仓数据库的操作。 需要注意的是,根据引用的描述,可能会遇到maven中央仓库中没有对应版本的人大金仓依赖。在这种情况下,可以将人大金仓的依赖手动添加到本地maven仓库中,以便项目能够正常编译和运行。 以上是整合人大金仓数据库的一般步骤,根据具体项目需求和环境配置可能会有所不同。在实际操作过程中,还需要根据具体情况进行适当的调整和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Maven搭建Springboot+MyBatisPlus+人大金仓数据库](https://blog.csdn.net/sadoshi/article/details/129731360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值