(03)华为GaussDB(基于PostgreSQL)高斯数据库使用记录,java hibernate框架项目连接高斯数据库,重写hibernate方言转换字段大小写或者使用高斯新驱动
(03)华为GaussDB(基于PostgreSQL)高斯数据库使用记录,java hibernate框架项目连接高斯数据库,重写hibernate方言转换字段大小写或者使用高斯新驱动
·
版本说明
spring版本:4.3.7
hibernate版本:5.1.17 Final
高斯数据库版本:gaussdb (GaussDB Kernel 505.1.0 build da28c417) compiled at 2024-04-18 22:54:55 commit 8474 last mr 17213 release
pom文件引入高斯数据库驱动
<!-- 高斯数据库驱动-->
<dependency>
<groupId>com.huaweicloud.dws</groupId>
<artifactId>huaweicloud-dws-jdbc</artifactId>
<version>8.1.0</version>
</dependency>
配置高斯数据库连接
# 如果高斯是集群部署,多个地址使用逗号隔开,如ip1:port1,ip2:port2
cytjdb.url=jdbc:postgresql://ip:port/数据库名?currentSchema=模式名&targetServerType=master&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
cytjdb.username=用户名
cytjdb.password=密码
# 方言
cytjdb.dialect=org.hibernate.dialect.PostgreSQLDialect
cytjdb.validationQuery=SELECT 'x' FROM DUAL
程序之前用的oracle19,转为高斯数据库后发现字段全是默认小写,字段需要大写的话需要加双引号,sql也需要相应的加双引号,这样改造工作量很大,下面记录下全局修改的方式
数据库查询全返回小写属性了,而前端界面都是取得大写属性,导致前端无法正确取到属性,下面记录了两张方式、一种是重写方言(代码层面实现),一种是使用华为高斯给的新驱动、和配置方式(数据库层面实现)
一、重写hibernate方言转换字段大小写(代码层面实现)
MyPostgreSqlDialect.java
package org.hibernate.dialect;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
/**
* @description:重写 pg 方言,设置hibernate结果集 返回的字段全为大写
* @date: 2025/2/14
* @author: gaom
* @version: 1.0
*/
public class MyPostgreSqlDialect extends org.hibernate.dialect.PostgreSQLDialect{
public MyPostgreSqlDialect() {
super();
}
@Override
public ColumnAliasExtractor getColumnAliasExtractor() {
return CustomColumnAliasExtractor.INSTANCE;
}
private static class CustomColumnAliasExtractor implements ColumnAliasExtractor {
public static final CustomColumnAliasExtractor INSTANCE = new CustomColumnAliasExtractor();
@Override
public String extractColumnAlias(ResultSetMetaData resultSetMetaData, int i) throws SQLException {
return resultSetMetaData.getColumnLabel(i).toUpperCase();
}
}
}
修改配置文件使用重写的方言
# 方言
cytjdb.dialect=org.hibernate.dialect.MyPostgreSqlDialect
修改后重启项目测试,全返回大写属性了
二、使用华为高斯新驱动,转换字段大小写(数据库层面实现)
pom引入新驱动jar
仓库没找到,我是自行上传到公司私服的
<!-- 高斯数据库驱动 新版本-->
<dependency>
<groupId>com.huawei.gaussdb</groupId>
<artifactId>gaussdbjdbc</artifactId>
<version>1.0</version>
</dependency>
srping-hibernate.xml 配置显式指定驱动
oralce等数据库阿里druid会自动识别、高斯需要指定driverClassName
<property name="driverClassName" value="com.huawei.gaussdb.jdbc.Driver"/>
修改配置文件
# 这里是jdbc:gaussdb ,增加了 uppercaseAttributeName=true 配置来转换为大写
cytjdb.url=jdbc:gaussdb://ip1:port1,ip2:port2,ip3:port3/数据库名称?currentSchema=模式&uppercaseAttributeName=true&targetServerType=master&loggerLevel=OFF&connectTimeout=30&socketTimeout=30&loginTimeout=30&prepareThreshold=1&batchMode=on&fetchsize=10&defaultRowFetchSize=10
cytjdb.username=数据库用户名
cytjdb.password=密码
# 这里方言使用pg默认的方言即可
cytjdb.dialect=org.hibernate.dialect.PostgreSQLDialect
cytjdb.validationQuery=SELECT 'x' FROM DUAL
cytjdb.showSql=true

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)