一、配置方法修改

1、添加maven依赖

<!-- 人大金仓 -->
            <dependency>
                <groupId>cn.com.kingbase</groupId>
                <artifactId>kingbase8</artifactId>
                <version>8.6.0</version>
            </dependency>

2、连接配置,修改 .yml 文件

# spring
spring:
  # datasource
  datasource:
    driver-class-name: com.kingbase8.Driver
    url: jdbc:kingbase8://IP:54321/数据库
    username: 账号
    password: 密码

3、mybatis-plus,修改 .yml 文件

添加人大金仓的单独的 mapper xml位置 :mapper-locations

列格式 column-format ,这个不用数据库关键字,理论不用加;就是库表设计不合理;

postgreSql

# mybatis-plus
mybatis-plus:
  # log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
  # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:mapper-kingbase/**/*Mapper.xml
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
    jdbc-type-for-null: 'null'
  global-config:
    banner: false
    db-config:
      logic-delete-field: DELETE_FLAG
      logic-delete-value: 1
      logic-not-delete-value: 0
      column-format: "\"%s\""

 mysql

# mybatis-plus
mybatis-plus:
  # log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
  # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapper/**.xml
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
    jdbc-type-for-null: 'null'
  global-config:
    banner: false
    db-config:
      logic-delete-field: DELETE_FLAG
      logic-delete-value: 1
      logic-not-delete-value: 0
      column-format: "`%s`"

二、功能方面的修改

1、因为pgsql是强类型,所以

1)类型必须匹配

数据库是varchar ,则sql语句传递类型就是String

数据库是boolean,则sql语句传递类型就是Boolean

数据库是integer,则sql语句传递类型就是Integer

数据库是bigint,则sql语句传递类型就是Long

数据库是timestamp(6),则sql语句传递类型就是LocalDateTime

数据库是date,则sql语句传递类型就是LocalDate

2)mybatis xml 微调

尽量用 #{},${参数} 得根据类型确认是否加单引号;

3)数据库关键字不要加反引号  “`”;

三、使用相应类型的数据库函数

人大进程默认兼容模式有:oracle、pg、mysql 根据实际情况修改

注意分页语句差异,为了保证各数据库兼容性,这个关联查询全去掉 xml的分页参数,改为注入mybatis-plus的分页参数;

# 方案一:page 参数通过实体封装一个 HttpServletRequest 自动构造方法,核心就是自动构造page参数
Page<T> page = new Page<>(current, size);
if (ObjectUtil.isNotEmpty(orderItemList)) {
    page.setOrders(orderItemList);
}
# 那样xml就不用写分页参数了(下面的T不限制类型),但是需要加 param.属性
Page<实体Dto> getListByParam(Page<T> page, @Param(" param.属性") 参数Paran 参数Param);

# 方案二(未采用):为了xml少写 param.属性 ,可以所有查询参数集成自分页参数
# 那样实体代码得很规范,records、total、size、current、orders、optimizeCountSql
# 、searchCount、optimizeJoinOfCountSql ,这边做不到,所以未采用
 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
public class UserPage extends Page<User> {
    private String name;
 
    // getters and setters
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

 postgresql的分页查询

select * from tab limit ${pageSize} offset ${startRow}

四、假设数据类型不一致

采用 USING column::转换后类型;,可以 using 方法::转换类型,例如 USING null::转换后类型;

ALTER TABLE tableName ALTER COLUMN column TYPE BIGINT USING column::BIGINT;

五、数据迁移:

用数据库迁移工具,从mysql迁移至kingbase,date 会转成pgsql中的date;但mysql datetime 会转成pgsql 中的timestamp(对应java中的LocalDateTime),只有部分类型存在问题,详见下面介绍

1、迁移工具配置

1)迁移目标模式选择 public,代码和配置不用做太多改动;

2)数据类型配置

我们这边tinyint,仅为tinyint(1) ,做boolean类型,所以配置迁移工具:tinyint 对应 kingbase中的 boolean;

数据库这边配置存储图片用的TINYBLOB、LONGBLOB、MEDIUMBLOB、blob,需要配置迁移工具转换类型对应bytea

bytea 可以存储最大 1 GB 的数据,bytea 的兼容性更高,可以避免修改大量的代码

注:如果你类型设置错误,需要删除迁移任务,关闭迁移工具的控制台,再次新建任务;

2、内置工具

后期规范了数据库:这边mysql 数据库用utf8mb4,导出sql语句不存在别的类型:这样直接迁移数据也不会中文乱码,迁移失败的只有索引的注释;

点击:然后访问 http://localhost:54523 或 https://localhost:54524http://localhost:54523 或 

2、navicat 的数据传输

如果您的数据库存在非utf8mb4 编码的类型,可能导致能迁移数据库和自增索引,迁移数据、很大概率报错,表注释乱码你可以导出sql批量删除一下编码定义,然后新建一个utf8mb4的数据库再导入mysql;

或者借助navicat, 能迁移 库表、数据和注释,迁移索引会报错,不能迁移自增索引;

所以这边综合:用 内置迁移工具迁移表结构(含自增索引,然后用navicat 迁移数据和注释

注:注释中的列明大写,要改成小写

六、原备份功能不可用,切换备份逻辑

springboot 人大金仓 kingbase-备份还原,命令中带密码,支持window和linux-CSDN博客文章浏览阅读152次,点赞3次,收藏4次。命令带密码参考Java代码实现国产人大金仓数据库备份还原需求-CSDN博客本人在一次项目中,遇到了需要在系统管理中提供给用户备份还原系统数据的功能,由于项目特殊性,项目底层数据库使用了国产人大金仓数据库(版本V8)。由于本人也是第一次使用金仓数据库,所以在功能实现过程中,踩到了一些坑,特此记录一下,共大家参考,避免踩到和我一样的坑。https://blog.csdn.net/qq_26408545/article/details/137747017?spm=1001.2014.3001.5502

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐