1、背景
项目中mysql数据库要替换成神通数据库;库中的表有部分是内置数据,即项目安装部署后库、表要已经创建完成,并且部分表里要有内置数据,项目启动要能根据实体类动态更新表结构(为了方便升级、运维)
2、基本流程
2.1 安装使用神通数据库
由于资源匮乏,暂时只有windows 10版神通数据库,数据库安装好后会生成一个文件夹,文件夹内有一系列操作神通数据库的工具(创建数据库的工具、数据迁移的工具、管理工具等)
2.2 创建库、启动
神通安装后自带的数据库配置工具来创建一个数据库,并在服务中开启此数据库服务(具体操作可搜索神通数据库使用教程)
2.3 数据迁移
使用神通数据迁移工具,将项目中mysql数据库的结构及数据(包括表、约束、数据等)迁移到神通数据库。
2.4 数据导出
使用神通的SQL交互工具将迁移好的神通数据库里面的表结构以及表数据导出.sql脚本文件
2.5脚本修改
导出的.sql脚本类似mysql导出的脚本,但是要改写东西。脚本中建表语句下面会有创建索引及约束的语句,导出的pk都是大写且不带双引号,需要把pk修改为小写并加上双引号;不然执行报错。
3.注意点
3.1 .sql脚本导出导入问题
使用神通数据库工具导出的.sql脚本再使用工具导入会报错,目前我是采用执行语句的方法来建表(命令行导入.sql脚本未尝试)
如果执行的话,就有建表语句的顺序的问题,假如a表建表时关联了b表,那就要先把b表先建好
3.2 主键自增问题
神通的sql中,主键可以自增,但是项目的实体中,id的strategy设置为GenerationType.IDENTITY会报错,不支持自增。但是如果先建好表,项目中实体用identity不会报错(由于不利于后期升级与维护,故舍弃),暂时用sequence代替主键自增的功能,每一个实体的id都创建一个sequence
3.3 连接池
项目中之前数据库连接池使用的alibaba的,但是看了alibaba的连接池源码暂时不支持神通,所以就用的自带的连接池
3.4 项目中自定义sql查询
项目中如果有自定义sql,即nativeQuery查询,表前要加schema,采用库.表,例如mysql查询:select * from user;神通中要写select * from test.user 。test为库名。
3.5 部分函数支持
神通的函数不支持find_in_set(),可以用local()函数替代;like查询时,如果表中某个字段类型是数字类型,查询时要使用cast()函数把字段它转为varchar。(在sql工具上写sql语句时可以的,但是项目中用的神通数据库驱动不支持此查询)例如:telNum(电话号码)字段为int型
mysql查询:select * from user where telNum like ‘135%’; 神通查询要改为:select * from user where cast(telNum as varchar(10)) like ‘135%’;
目前还在适配中,后续问题会更新