关于表变动而导致的实体变动问题

简介: 因为表变动而导致的实体变动问题,出现这种情况较多的是版本迭代的时候。 项目开发初期,表变动导致的代码改动量相对较小,改动后出现的问题也比较少。而在项目迭代的过程中,因为项目已经成型,大部分代码的逻辑和用法都已固定。

因为表变动而导致的实体变动问题,出现这种情况较多的是版本迭代的时候。

项目开发初期,表变动导致的代码改动量相对较小,改动后出现的问题也比较少。而在项目迭代的过程中,因为项目已经成型,大部分代码的逻辑和用法都已固定。此时表变动将有可能导致大量业务逻辑代码不可用。

这篇文章就说说因为表变动而需要修改的代码部分。

在此之前先说两个修改代码的小诀窍

修改代码的诀窍

诀窍一:

如果你用的开发工具是 IDEA 的话,你可以选中类名,然后按下 shift + F6 ,这时候会出现修改类名的对话框。在此处修改类名,将会把项目中有项目引用的地方一起修改。这个方法不仅方便,而且可以使你知道哪些地方的代码受到影响。

修改类名的对话框如下图:

_

诀窍二:

如果你用的开发工具是 IDEA 的话,当你删除类的时候会弹出如下对话框:

_1

选择“Safe delete(with usage search)”,点击“OK”,此时会出现如下对话框:

_2

点击“View Usages”,此时会出现如下对话框:

_3

你将看到因为删除类而产生的影响,即该类在哪些地方被引用了。

因表变动而导致的实体变动有以下四种修改方式:

说明:以下说明采用的示例均为原表是 User,现改为 BaseUser。

方式一:

先创建新表的实体类,然后删除旧表的实体类,即创建完 BaseUser 的实体之后,直接删除 User 实体。之后通过开发工具的报错信息,或者项目启动时候的报错,对项目中受到影响的代码进行修改。

开发工具的报错信息如下图:

_

项目启动时候的报错信息如下图:

_

优点:

能够快速定位受到影响的代码位置。

缺点

  1. 代码改动量大。
  2. 由于旧实体的删除而导致代码逻辑理解错误。
  3. 无法短时间内启动项目,必须把代码一次性改好。

方式二:

先创建新表的实体类,然后找出引用该实体相关代码将新旧实体进行替换,等全部替换完后再进行旧代码的删除。

优点:

  1. 可以短时间内对修改过的代码进行调试。
  2. 原业务逻辑都在,在修改代码时可以参考。

缺点:

在删除旧实体之前,容易遗漏受到影响的代码,从而导致项目开发进度受到影响(这个影响可大可小)。

方式三:

创建新表实体类,同时创建新表实体类的service、mapper等相关文件,之后将旧实体类的相关代码迁移到新表实体类的相关代码中。即同时 BaseUser 、BaseUserController、IBaseUserService、BaseUserServiceImpl、BaseUserMapper、BaseUserMapper.xml,之后将 User 、UserController、IUserService、UserServiceImpl、UserMapper、UserMapper.xml 的相关代码迁移到之前创建的代码中。

优点:

  1. 可以短时间内对修改过的代码进行调试。
  2. 原业务逻辑都在,在修改代码时可以参考。

缺点:

  1. 在删除旧实体之前,容易遗漏受到影响的代码,从而导致项目开发进度受到影响(这个影响可大可小)。
  2. 代码修改量大

方式四:

将旧实体类的表映射直接替换为新表的映射,即将原来的 @TableName("USER") 修改为 @TableName("BASE_USER"),同时将旧表实体的属性改为新表实体的属性。具体修改方式如下:

@EqualsAndHashCode(callSuper = true)
@TableName("BASE_USER")
@Data
public class User extends Model<User> {
    /**
     * 用户ID
     */
    @TableId(value = "ID",type = IdType.AUTO)
    private Integer id;
    /**
     * 用户名
     */
    @TableField("NAME")
    private String name;
    ......
}

优点:

  1. 在表字段修改不多的情况下,此种方法代码改动量最小。
  2. 可以短时间内对修改过的代码进行调试。

缺点:

由于旧实体的变动而导致代码逻辑理解错误。

综合以上四个方法,第四个方法相对较好

相关文章
|
XML API Android开发
Android WIFI使用简述(上)
Android WIFI使用简述(上)
1200 1
|
2月前
|
机器学习/深度学习 算法 搜索推荐
RouteRAG:用特殊 Token 和强化学习构建可学习的 RAG 检索策略
RouteRAG将多轮RAG建模为序列决策过程,模型自主学习何时检索、搜什么、用哪种模式(段落/图/混合),并通过两阶段GRPO强化学习,兼顾答案准确率与检索效率,在多跳问答上显著提升性能。
184 12
RouteRAG:用特殊 Token 和强化学习构建可学习的 RAG 检索策略
|
2月前
|
运维 监控 Java
线上故障零扩散:全链路监控、智能告警与应急响应 SOP 完整落地指南
本文系统阐述线上服务稳定性保障体系:以全链路监控(指标/链路/日志)为基石,构建五层分层监控;通过智能告警(分级、抑制、聚合、动态阈值)实现精准触达;落地标准化应急SOP(止损优先、分工明确、闭环复盘);最终形成“监控→告警→响应→复盘→优化”持续闭环,推动运维从被动救火转向主动防控。
449 2
|
1月前
|
人工智能 安全 数据可视化
Windows 全版本 OpenClaw 搭建教程 零代码可视化一键部署
OpenClaw(小龙虾)是2026年热门开源AI自动化工具,支持Win10/11本地离线运行。零代码、全图形化、内置依赖、多模型切换、大Token额度,5–10分钟一键部署。数据不出设备,安全可控,适配办公全场景。(239字)
240 1
|
2月前
|
人工智能 文字识别 测试技术
AutoGod:一款拥有AI视觉的安卓自动化框架
AutoGod是一款面向安卓的AI视觉自动化框架,融合多引擎OCR、YOLO目标检测与VMP混淆引擎,解决传统方案元素定位脆弱、兼容性差、安全性低等痛点,支持自动化测试、游戏脚本与企业RPA,兼顾智能性、鲁棒性与安全性。
536 11
|
机器学习/深度学习 人工智能 编解码
R1-Onevision:开源多模态推理之王!复杂视觉难题一键解析,超越GPT-4V
R1-Onevision 是一款开源的多模态视觉推理模型,基于 Qwen2.5-VL 微调,专注于复杂视觉推理任务。它通过整合视觉和文本数据,能够在数学、科学、深度图像理解和逻辑推理等领域表现出色,并在多项基准测试中超越了 Qwen2.5-VL-7B 和 GPT-4V 等模型。
632 0
R1-Onevision:开源多模态推理之王!复杂视觉难题一键解析,超越GPT-4V
|
XML 算法 Java
Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)
Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)
1417 0
|
SQL 数据管理 数据处理
Python生成SQL语句
【7月更文挑战第3天】Python在数据处理中常用于自动生成SQL语句,提高效率,减少错误,增强灵活性。通过Python,可以方便地创建、插入、更新和删除数据库记录。示例代码展示了如何使用sqlite3库连接SQLite数据库,生成查询、插入、更新和删除语句。此外,还提到了使用SQLAlchemy和Peewee等ORM工具简化SQL操作。通过自定义SQL语句生成器,可以进一步定制化SQL构造,适应不同场景。使用参数化查询可避免SQL注入,保证安全性。
|
数据采集 存储 数据可视化
Filebeat 采集 Docker 日志
由于容器的特性,在容器重新创建后日志会废弃掉,如何通过持久化和中心化的处理容器日志变成一个棘手的问题,如何通过 Elastic Stack 进行一站式的数据采集,数据清洗,数据落地,数据可视化,让数据发挥真正的价值呢?
1923 0
Filebeat 采集 Docker 日志
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
599 0

热门文章

最新文章