sql升级更新解决方案

本文介绍了一种在项目启动时自动更新数据库的方法,通过创建sys_sql_upgrade_record表记录升级SQL,利用MybatisPlus自动生成代码并利用反射执行未执行过的SQL。另一种方案涉及使用XML配置和temp表存储版本信息,但工作量较大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题

随着项目版本的迭代,有时候需要更新数据库如修改字段、更新数据、删除数据等等,但是如果系统已经部署到生产环境了,让开发人员连接生产环境的数据库手动处理是不太实际的,生产环境数据库一般不允许外部连接,而且这么处理效率太低也容易出错。

2.解决方案

在项目启动时进行数据库自动更新,更新后记录执行的sql方法名

2.1创建sql升级记录表

CREATE TABLE `sys_sql_upgrade_record` (
  `id` varchar(100) NOT NULL COMMENT 'id',
  `sqlKey` varchar(100) NOT NULL COMMENT 'sqlKey',
  `createTime` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sql升级记录';

2.2对sql升级记录表生成代码

我用的是Mybatis Plus框架,用mybatis-plus-generator工具对sys_sql_upgrade_record表生成controller, entity, mapper, service代码

2.3配置sql升级

项目启动时执行sql升级操作,使用反射机制获取SqlUpgradeRecordMapper的全部自有方法,然后查询sys_sql_upgrade_record表所有的sqlKey,判断每个方法是否存在表中,不存在则用invoke执行,然后保存方法名到sys_sql_upgrade_record表

@Component
@Slf4j
public class CustomCommandLineRunner implements CommandLineRunner {
   
    @Autowired
    private SqlUpgradeRecordService sqlUpgradeRecordService;

    @Override
    public void run(String... args) throws Exception {
   
        log.info("初始化");
        try {
   
            sqlUpgradeRecordService.executeSqlUpgrade();
        } catch (Exception e) {<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值