达梦数据库使用记录,java spring4.3.7+ hibernate5 框架项目连接达梦数据库,重写hibernate方言转换字段大小写
版本说明spring版本4.3.7hibernate版本:5.1.17 Final达梦数据库版本:DM Database Server 64 V8pom文件引入达梦数据库驱动!-- 达梦数据库驱动 --dependencygroupIdcom.dameng/groupIdartifactIdDmJdbcDriver18/artifactIdversion8.1.2.192/version/dependencydependencygroupIdcom.dameng/groupIdartifactIdDmDialect-for-hibernate5.0/artifactIdversion8.1.2.192/version/dependency对应jarDmJdbcDriver18-8.1.2.192.jarDmDialect-for-hibernate5.0-8.1.2.192.jar配置达梦数据库连接cytjdb.driverClassNamedm.jdbc.driver.DmDriver cytjdb.urljdbc:dm://192.168.xx.xxx:5236?schemaBBP402CYTJDEV41 cytjdb.usernameBBP402CYTJDEV41 cytjdb.passwordxxxx cytjdb.dialectorg.hibernate.dialect.DmDialect cytjdb.validationQuerySELECT x FROM DUAL程序之前用的oracle19C,之前语法有 select A as name的语法在oralce下统一返回大写NAME但是转为达梦数据库后发现select A as name 结果也返回小写的name了需要改为select A as NAME ,才会返回大写整个系统很多地方都是写的小写的字段名这样改造工作量很大,下面记录下全局修改的方式重写hibernate方言转换字段大小写(代码层面实现)MyDmUpperCaseDialect.javapackageorg.hibernate.dialect;importorg.hibernate.type.StringType;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;importjava.sql.Types;/** * description: 自定义达梦方言强制将 ResultSet 中的列别名转为大写 * date: 2026/2/6 * author: gaom * version: 1.0 */publicclassMyDmUpperCaseDialectextendsDmDialect{publicMyDmUpperCaseDialect(){super();// 如果有特殊类型映射可在此注册registerHibernateType(Types.OTHER,StringType.INSTANCE.getName());}OverridepublicColumnAliasExtractorgetColumnAliasExtractor(){returnUpperCaseColumnAliasExtractor.INSTANCE;}privatestaticclassUpperCaseColumnAliasExtractorimplementsColumnAliasExtractor{publicstaticfinalUpperCaseColumnAliasExtractorINSTANCEnewUpperCaseColumnAliasExtractor();OverridepublicStringextractColumnAlias(ResultSetMetaDataresultSetMetaData,intcolumn)throwsSQLException{// 获取列标签通常是别名并转为大写StringlabelresultSetMetaData.getColumnLabel(column);returnlabel!null?label.toUpperCase():;}}}修改配置文件使用重写的方言# 方言 cytjdb.dialectorg.hibernate.dialect.MyDmUpperCaseDialect修改后重启项目测试全返回大写属性了