人大金仓(Kingbase)数据库配置注意事项

您所在的位置:网站首页 人大金仓数据库注意事项 人大金仓(Kingbase)数据库配置注意事项

人大金仓(Kingbase)数据库配置注意事项

2023-04-17 12:13| 来源: 网络整理| 查看: 265

使用规范 强烈建议表名和字段名统一使用小写或者大写,人大金仓数据库默认大小写敏感创建函数和存储过程可以使用Oracle的语法创建,兼容Oracle语法。 避免使用关键字建表、建视图、函数等,关键参考 SQL关键词文档, GROUP BY 查询需要在SELECT 中指明字段,如不指明不能使用GROUP BY,可以使用DISTINCT ON分页使用ROWNUM伪列来实现分页可参考Oracle语法 或者 使用limit进行分页也可以语法参考postgresql 支持序列,用法和ORACLE一样不支持where条件中判断非NULL的空字段,如下: --不支持的写法 SELECT * FROM USER WHERE ADDR = ''; --建议写法,使用length函数,支持oracle/mysql/postgresql/kingbase等多种数据库 SELECT * FROM USER WHERE length(ADDR) = 0; 引入依赖

在pom.xml中配置如下:

驱动包需要本地安装,或者通过systemPath引入:

com.kingbase8 kingbase8 8.2.0 Druid 数据库连接池 Druid 金仓V82 的配置例子: jdbc.driverClassName=com.kingbase8.Driver jdbc.url=jdbc:kingbase8://127.0.0.1:54321/test jdbc.username=root jdbc.password=1qaz!QAZ filters= stat,log4j

filters常用种类: 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall目前不支持国产数据库

模式指定

默认使用public模式,建议指定模式,指定方式,如下:

jdbc.url=jdbc:kingbase8://127.0.0.1:54321/test?currentSchema=rdp_server

rdp_server 会自动变成大写 RDP_SERVER、rdp_server和"rdp_server"是相等的

Mybatis注意事项 需要使用MyBatis 3及后续版本建议使用版本Mybatis3.2.8,Mybatis3.3.0和Mybatis3.4.5 官方均已通过版本适配的验证测试 KingbaseES 支持array数据类型,在MyBatis中需要增加ArrayTypeHandler来处理这以特殊类型;KingbaseES 支持json数据类型,在Mybatis中需要增加JsonTypeHandler来处理这一特殊类型; KingbaseES 支持hstore数据类型,在Mybatis中需要增加HstoreTypeHandler来处理这一特殊类型;KingbaseES 支持XML数据类型,在Mybatis的映射中,需要对xml数据类型做标注,如: insert into t_xml(value) values ((#{content})::xml) KingbaseES String转存Blob字段类型需要增加转换类来处理,参考如下: import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.io.ByteArrayInputStream; import java.sql.*; /** * @author:WC * @date: 2021/6/4 * @time: 10:09 */ public class BlobToStringTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { byte[] bytes = parameter.getBytes(); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ps.setBinaryStream(i, bis, bytes.length); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { Blob blob = rs.getBlob(columnName); return new String(blob.getBytes(1, (int)blob.length())); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { Blob blob = rs.getBlob(columnIndex); return new String(blob.getBytes(1, (int)blob.length())); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { Blob blob = cs.getBlob(columnIndex); return new String(blob.getBytes(1, (int)blob.length())); } } Mybatis-plus配置

如果使用mybatis-plus快速开发,建议指定模式,配置方式如下:

mybatis-plus: global-config: db-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: NONE #oracle兼容,人大金仓建议配置为NONE schema: rdp_server #指定模式 触发器注意事项

如果使用触发器实现插入数据自增主键,实体中注解不能使用IdType.AUTO,否则触发器不能被触发

@TableId(value = "user_id",type = IdType.NONE) 分页配置

推荐方式一:使用 v3.3.0 (包括)以上版本的mybatis-plus版本

推荐方式二:修改方言,将方言修改为ORACLE或者POSTGRE_SQL,都可以。

/** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { dbType = dialectType; PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); if("KingbaseES".equals(dialectType)){ paginationInterceptor.setDialectType(DbType.POSTGRE_SQL.getDb()); }else if("MySQL".equals(dialectType)){ } return paginationInterceptor; }

不推荐方式三:重写插件中JdbcUtils.java 类,人大金仓兼容ORACLE语法,我们可以直接返回DbType为Oracle或者postgresql,参考如下:

public class JdbcUtils { /** *

* 根据连接地址判断数据库类型 *

* * @param jdbcUrl 连接地址 * @return */ public static DbType getDbType(String jdbcUrl) { ...... } else if (jdbcUrl.contains(":oracle:")||jdbcUrl.contains(":kingbase8:")) {//在此处添加 return DbType.ORACLE; } ...... } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3