数据库迁移
1、安装Kingbase时一定要确认是否大小写敏感。
2、使用Kingbase数据库自带的迁移工具进行数据库迁移,里面设置的很细致,最好不要用别的软件迁移。
Springboot项目
1、核心依赖(官网可下载人大金仓-成为世界卓越的数据库产品与服务提供商 (kingbase.com.cn))
<dependency>
<groupId>com.kingbase8</groupId>
<artifactId>kingbase8</artifactId>
<version>8.6.0</version>
</dependency>
2、配置文件
datasource:
driver-class-name: com.kingbase8.Driver
url: jdbc:kingbase8://localhost:54321/(数据库名)?currentSchema=(模式名)
username: root
password: 123
pagehelper:
helperDialect: postgresql
Kingbase中每个库有不同的模式,这里可以使用currentSchema定义你使用的模式(会避免很多问题),端口号,用户名和密码写自己的。配置文件中相关SQL的部分都替换为Kingbase相关的配置。
3、触发器
如果实例化对象类(Po类)原本项目中采用的是触发器实现主键自增,迁移后需要更改。
如果主键是UUID改成(注释为MySQL数据库的语句):
@Table(name = "kk")
@Data
public class KkPo{
@ExcelProperty("")
@Column(name = "id")
@Id
// @KeySql(sql = "select uuid()", order = ORDER.BEFORE)
@KeySql(sql = "select LOWER(sys_guid()) from dual;", order = ORDER.BEFORE)
private String id;
}
如果主键是自增可以改成:
@ExcelProperty("")
@Column(name = "id")
@Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
@KeySql(sql = "CREATE SEQUENCE if not EXISTS (序列名随便取) Start with 1 INCREMENT by 1;SELECT (前面取的序列名).nextval;", order = ORDER.BEFORE)
private Integer id;
这里第二种主键自增的情况在Kingbase数据库中,需创建自增序列,然后进入取值。如果迁移数据库中已有数据。可以将Start With 后面的数字调整到不会重复的大小。
4、迁移的表格中如果有sys_xxxxx形式的表格,可能会和Kinbgbase自带表格重名,不指定查询模式时会查串。查询时可以添加模式名,a为模式名(注意不是数据库名)。
select * from a.sys_user
5、如果在Mapper中查询语句使用了!=null 或 !='',换成is not null。(注意,只有SQL语句部分替换,<if>标签中不用替换)
6、时间格式函数据替(Kingbase中没有date_format函数)。
// date_format(create_time, "YYMMdd")
to_char(to_date(create_time),'YYMMdd')
7、bit类型数据比较。a为bit类型数据。
// select * from tab1 where a = 1
select * from tab1 where a = '1'
这里‘1’是未使用#{}符号直接写入的数字,会报错。这里有可能会出现在筛选逻辑删除等场景,建议进行排查。