Springboot项目从MySQL到KingBase迁移需要注意的问题

数据库迁移

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’是未使用#{}符号直接写入的数字,会报错。这里有可能会出现在筛选逻辑删除等场景,建议进行排查。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值