旧逻辑兼容整改之继承还是全字段(分一)

MyBatis-Plus批量更新不同ID不同值的四种方案与性能对比 在数据库操作中,批量更新是提升数据处理效率的关键技术。其核心原理是通过减少数据库交互次数来优化性能,常见于数据同步、批量审核等场景。从技术价值看,高效的批量更新能显著降低系统负载,提升响应速度。对于Java开发者,MyBatis-Plus框架提供了多种实现方式,但需根据具体场景选择。当需要根据不同ID更新不同字段值时,直接使用内置的updateBatchById方法可能遇到字段更新不全或性能不佳的问题。此时,结合MyBatis动态SQL的CASE WHEN语句方案,能通过单条SQL实现高性能更新,同时避免循 阅读详情

父类:ContCustomerVO,原来业务类:ContNewCustomer extends ContCustomer

核心原则:数据库 Entity、业务 Controller 类继承 ≠ VO 就一定要继承,VO 是面向接口输出 / 入参,要结合场景选。

方案 1:VO 继承(ContNewCustomerVO extends ContCustomerVO)

✅优点

  1. 公共字段只写一份,减少重复代码;父类改字段,子类自动生效
  2. 和后端 Model 继承结构对齐,代码直观
  3. 序列化(Jackson)正常工作,父类 get/set、注解@ApiModelProperty、校验注解@NotBlank子类全部继承生效

❌缺点

  1. 字段无法隐藏:如果新客户接口不需要父类中某几个字段,继承会全部带出来,不能直接删掉,只能用@JsonIgnore排除,多了一堆忽略注解
  2. 前端文档 (Swagger) 会把父类所有字段全部展示出来,容易混淆;
  3. 如果父类后续新增字段,子类 VO 会被动带上,容易出现无意泄露字段;
  4. 嵌套层级,调试看 JSON 结构会多一层继承关系。

适合场景:新客户 VO 只是在原有客户基础上新增少量字段,不需要剔除父类任何字段。

@Data
public class ContCustomerVO {
    private Long id;
    private String customerName;
    private String phone;
}

@Data
public class ContNewCustomerVO extends ContCustomerVO {
    // 只写新增的字段
    private String inviteCode;
    private LocalDateTime registerTime;
}

方案 2:全字段拷贝(不继承,复制所有字段)

✅优点

  1. 完全自主控制输出字段,不需要的字段直接不写,接口返回干净;
  2. 不受父类改动影响,父类加字段,本 VO 不会被动增加;接口稳定性高;
  3. Swagger 文档干净,没有继承带来的一堆无关字段;
  4. 不会出现莫名其妙@JsonIgnore一堆字段。

❌缺点

  1. 大量重复字段;父类修改字段,子类 VO 要同步改,容易漏改;
  2. 和业务类继承结构不一致,阅读代码会疑惑。

适合场景:新客户接口和普通客户接口字段差异大,需要丢弃部分父类字段。

🔥工程上最佳实践(我们业务系统常用)

  1. Entity 可以大胆继承(数据库映射,复用公共数据库字段)
  2. VO 优先看接口输出:
  • 如果接口输出几乎全部父类字段,只加几个:用继承 VO
  • 如果接口要丢弃一部分父类字段:不要继承,手写全部需要的字段

坑提醒:很多人直接照搬业务类继承给 VO,后续父类加敏感字段,VO 直接返回给前端,造成数据泄露。

折中方案(不想复制字段,又要过滤输出)

继承 VO + DTO 转换层,不要直接把数据库对应的 VO 返回前端。 ContNewCustomer(entity) → 转成前端输出DTO,转换的时候显式指定需要哪些字段。

快速判断一句话

ContNewCustomer 是业务逻辑继承;VO 是接口契约。 接口返回字段 = 父类全部字段 + 少量新增 → 继承 VO 接口返回字段 ≠ 父类全部字段(要删部分字段) → 直接写全字段,不要继承

举个例子

普通客户 VO:id,name,phone,balance,deleteFlag 新客户接口:只需要 id,name,phone,不需要 balance、deleteFlag 👉 不要继承,直接手写需要字段,不要继承然后 @JsonIgnore balance、deleteFlag。

OpenVins解析:基于滤波框架的SLAM 这一方式存在的关键问题是匹配耗时很长,对性能影响显著。可以参考ORBSLAM3中的匹配方式来对其优化,比如左右目匹配可以在极线上搜索,前后帧可以利用运动先验投影匹配。理论上加入路标点会提升精度,代价是增加了计算量。着重说下基于描述子的匹配:OpenVins中匹配的方式是robust_match(),里面是调用的opencv的。openvins中不仅仅进行了传统的MSCKF更新(状态向量中不包含路标点),还在。中进行了包含路标点的估计更新。图像帧到来时,利用IMU递推得到的位姿给该图像帧赋初值。 阅读详情

相关推荐

保姆级教程:用Wireshark抓包分析10M汽车以太网PLCA轮询机制(附pcap文件)

本文详细介绍了10M汽车以太网PLCA轮询机制的抓包分析与性能优化方法。通过Wireshark实战教程,解析PLCA协议的时分多址特性、总线型拓扑结构及带宽优化策略,帮助工程师提升车内网络的可靠性和实时性。附赠pcap文件供实践参考。

wdx01234567的博客 239

旧逻辑兼容整改之其他方案(分二)

摘要:针对VO层设计避免无脑继承或复制字段的问题,提供了多种解决方案:组合(聚合)模式、接口抽取公共字段、MapStruct映射、动态JSON视图等。其中,组合模式通过持有父VO对象实现字段透传,结合@JsonUnwrapped可平铺输出但存在反序列化问题;接口抽取统一方法签名但需复制字段;最推荐业务项目使用MapStruct,实现实体与VO解耦,灵活映射字段;动态视图(@JsonView)适合简单接口复用VO,复杂场景维护困难。核心原则是分离实体继承与VO契约,优先选择MapStruct确保工程稳健性。

devilnumber的博客 199

《寻秦OL》.ani动画逆向解析:二进制结构与Unity重实现

动画文件格式是游戏资源逆向的核心入口,其本质是一组按特定规则组织的二进制数据流。理解魔数识别、字节序、字段对齐与差分编码等底层原理,是解析非标准格式的关键前提。技术价值在于绕过黑盒协议,直接从静态客户端提取可验证的原始语义;典型应用场景包括老游戏复刻、美术资产抢救、引擎跨平台迁移及教学级逆向训练。本文以《寻秦OL》的`.ani`文件为实例,深入剖析其C风格结构布局、GB2312中文命名、16位定点数旋转表示及帧主序差分存储机制,并基于C#在Unity中完成从字节流到AnimationClip的端到端重建,覆

weixin_30368981的博客 640

MOMO CODE 配置完全参考:momo.jsonc 全字段、环境变量与自定义 OpenAI 协议接入

🤖 **MOMO CODE** 是一个完全开源、会「自进化」「自微调」的 AI 编程 Agent,内置 `/evolve` 快环与 `/fine-tune` 慢环,支持 25+ 大模型接入。想让它稳定工作并真正"越用越聪明",第一步就是配好三个核心入口:配置文件 **momo.jsonc**、`MOMO_` 前缀的环境变量,以及自定义 OpenAI 兼容协议。本文一次性讲清 **16 个 mom

gitblog_01078的博客 37

Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示

调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。

whik1194的博客 757

TensorRT量化实战教程:从PTQ到QAT,让你的模型推理速度飞起来

无论是PTQ的“快速落地”,还是QAT的“精度极致”,TensorRT量化技术都能成为你模型部署路上的“性能引擎”。通过本教程的实战项目,你已掌握从技术原理到工程落地的全流程能力——现在,不妨将你的模型代入其中,亲眼见证它在速度与精度的双重提升中“焕发生机”。若你在实操中遇到任何卡点,随时可以针对具体问题交流,我会尽全力帮你突破量化部署的每一个瓶颈。

FJN110的博客 237

react-slick 实用配置指南:responsive 响应式、自定义箭头与 Jest/旧浏览器兼容性设置

本文基于 react-slick 官方文档中的《common》(通用/常见问题)章节,系统讲解在日常接入与深度使用 react-slick 时最容易踩坑的五类问题:`responsive` 响应式断点配置、自定义 next/prev 箭头组件、Flexbox 布局兼容、Jest 测试环境下的 `matchMedia` polyfill,以及旧版 IE 的兼容支持。读完本文,你将能直接复刻出一份可运

gitblog_00034的博客 224

华为OD机考双机位C卷 - 补种未成活胡杨 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 补种未成活胡杨(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 2417

HarmonyOS 6 ArkUI - 基于React Native鸿蒙跨平台实现全字段校验、商品有效性验证、时效自动计算等核心步骤,保证订单创建的时效性和准确性

本项目采用React Native函数式组件架构,以为核心组件,实现了极速配送服务的完整功能流程。架构设计遵循模块化原则,将数据结构、状态管理和业务逻辑清晰分离,便于维护和扩展。 该类型设计合理,包含了商品的核心属性: 订单类型设计全面,包含了配送服务的关键信息: 配送员类型设计合理,包含了配送服务的必要信息:应用使用钩子管理四个核心状态: 数据流设计 单向数据流:状态 → 视图 → 用户操作 → 状态更新 数据验证:在创建订单前进行数据完整性检查 业务逻辑封装:将复杂计算逻辑封装在专用函数中,提高代码可

czhm57的博客 230

复现报告:《多回路人机控制系统仿真及II型PIO分析》方法复现与代码实现

本文复现了谭文倩硕士论文《多回路人机控制系统仿真及II型PIO分析》中的关键方法,重点实现了频域驾驶员模型辨识和参数灵敏度分析。通过数字化提取论文图表数据,构建了结构驾驶员模型传递函数,并验证了参数变化对系统特性的影响。采用MATLAB实现了描述函数计算、模型参数辨识和灵敏度分析算法,为后续神经网络模型辨识和II型PIO研究奠定了基础。由于缺乏原始实验数据,部分结果通过数值模拟获得,但仍有效重现了论文的核心分析方法。~~~~~

huanghm88的专栏 175

【100%通过率】华为OD机试真题 Python 实现【高矮个子排队】【2023 Q2 | 100分】

我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。移动距离的定义如下所示:第二位小朋友移到第三位小朋友后面,移动距离为1,若移动到第四位小朋友后面,移动距离为2。现在有一队小朋友,他们高矮不同,,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。1:其实题目理解之后就知道,目标是要保证最小移动距离,且以高位为起点。2:try catch 异常处理。

MISAYAONE的博客 3144

Grok Build 配置完全参考:config.toml、managed_config.toml 与 requirements.toml 全字段解析

Grok Build(SpaceXAI 的开源 coding agent harness / TUI)通过三类 TOML 文件完成从个人偏好到企业强制策略的全部配置:`config.toml` 由开发者自管,`managed_config.toml` 由部署方下发舰队默认值,`requirements.toml` 则是签名校验的管理员硬约束层。本文是这三份文件的完整字段参考手册,覆盖每一层级的加载

gitblog_00211的博客 866

智能硬件产品:做好一款电子硬件产品,工具必不可少

上到战略规划,中至运营策略,下至人性洞察,。最初做产品时,笔者从一开始就陷入到了对工具的痴迷,包括:PS、AutoCAD、PROE、犀牛、Axure、Keyshot、Altium……大概将 2 个多月的时间和精力都消耗在了学习使用工具上。通过工具的运用也确实提高了工作效率,在仅有创意的前提下通过灵活运用工具,一年内便成功申请了多个实用新型专利、设计了多款产品的高保真原型图等。正在上传…重新上传取消。

产品线负责人 1442

别再手动敲构造函数了!Lombok这三个注解帮你省下80%的样板代码

本文深入解析Lombok的三大构造函数注解@NoArgsConstructor、@RequiredArgsConstructor和@AllArgsConstructor,帮助Java开发者高效减少样板代码。通过实际案例展示如何智能生成无参构造、必要参数构造和全字段构造,提升开发效率并确保代码质量,特别适合Spring、JPA等框架集成场景。

weixin_30485379的博客 421

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

helmfile 配置参考:helmfile.yaml 全字段详解与源码级实现解析

本篇是 helmfile 项目中 `helmfile.yaml` 配置的完整参考指南,覆盖顶层区块(`repositories`、`releases`、`helmDefaults`、`environments`、`helmfiles`、`bases` 等)下全部可用字段的含义、默认值与使用场景。读完本文,你将能够:写出一个可投入生产使用的完整 `helmfile.yaml`;理解每个字段最终如何映

gitblog_00908的博客 218

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Argo Workflows WorkflowStep 全字段详解:Java SDK 类型参考与 steps 模板实战指南

WorkflowStep(步骤)是 Argo Workflows 中 `steps` 模板的最小执行单元,它通过引用模板、传递参数、展开循环、条件执行与容错控制,组合出顺序与并行交织的工作流编排逻辑。本文以仓库内 Java SDK 自动生成的类型文档 [IoArgoprojWorkflowV1alpha1WorkflowStep.md](https://link.gitcode.com/i/b0c

gitblog_00952的博客 263

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OpenClaw 2026.3.8 与 DeepSeek 协议兼容性深度解析

大模型网关(如 OpenClaw)并非简单替换 API Key 的客户端,而是依赖严格标准化的 REST 接口协议(如 /v1/chat/completions)实现模型路由与技能编排。其核心原理在于对响应结构、SSE 流式格式及错误码语义的强校验,技术价值在于保障多模型协同下的稳定性与可观测性。典型应用场景包括本地化 AI 工作流编排、企业级模型网关部署及私有化 LLM 技能平台构建。本文聚焦 OpenClaw 2026.3.8 与 DeepSeek 的实际集成,深入剖析协议不兼容根源,并提供 WSL2

weixin_30617797的博客 334

MyBatis-Plus入门:BaseMapper机制与CRUD高效开发

在Java后端应用开发中,数据库操作是业务系统的核心。MyBatis 作为灵活的 ORM 框架,常与 Spring Boot 搭配使用,但单表增删改查仍需编写大量重复 SQL。MyBatis-Plus 基于 MyBatis 构建,通过 BaseMapper 与泛型反射机制自动生成通用 SQL,显著降低 CRUD 代码量。同时,其条件构造器支持类型安全的查询条件,逻辑删除与主键策略等特性帮助开发者规避常见陷阱。从依赖配置到实体映射,从环境搭建到实战演示,适合初次接触 MyBatis-Plus 的开发者快速掌握

weixin_30225755的博客 243

MyBatis Generator自定义插件:按需生成指定字段查询方法

在ORM框架中,代码生成器能大幅提升开发效率,但默认全字段查询常导致性能瓶颈。通过扩展MyBatis Generator的PluginAdapter,开发者可在代码生成阶段拦截方法生成,注入自定义字段列表,实现按需查询。该方案将字段选择从运行时前移到生成时,既保留了自动化能力,又避免了手动SQL的维护成本。适用于字段多、大文本列频繁查询的电商、内容管理等场景,能有效降低网络传输与内存开销。本文拆解插件实现核心,涵盖扩展点选择、配置加载、方法注入与XML改写,并分享插件顺序、字段校验等实战经验。

weixin_29698641的博客 64

Lombok 三大注解 @Data、@NoArgsConstructor、@AllArgsConstructor 实战解析

本文深入解析Lombok三大核心注解@Data、@NoArgsConstructor和@AllArgsConstructor的实战应用。@Data注解能一键生成Getter、Setter、ToString等方法,极大简化Java实体类开发。结合构造器注解,可灵活应对不同框架需求,提升代码简洁性与开发效率,是Java开发者摆脱模板代码的利器。

x8y9z0的博客 837

从Fastjson 1.x迁移到Fastjson2:性能、安全与API兼容性实践指南

JSON序列化与反序列化是Java服务端开发中的基础操作,而Fastjson作为国内使用率极高的JSON处理库,其性能与安全性直接关系到高并发系统的稳定性。Fastjson2并非1.x的简单升级,而是一次底层重写,带来了更严格的AutoType安全机制、更强的泛型支持以及显著的吞吐量提升。本文面向正在使用或计划迁移的Java工程师,系统梳理核心API(如parseObject、toJSONString)的包路径变化,对比SerializerFeature与JSONWriter.Feature配置差异,分析S

weixin_34150830的博客 455

Puppeteer BrowserContext.setCookie() 详解:在浏览器上下文中批量写入 Cookie 的 API 与跨协议实现

`BrowserContext.setCookie()` 是 Puppeteer([puppeteer-core](https://link.gitcode.com/i/c8218ec361ee2a864cb0e24b5ef39f0e) 的浏览器级 Cookie API)中用于向某个**浏览器上下文(Browser Context)**写入 Cookie 的核心方法。它区别于面向单个 `Page`

gitblog_00069的博客 361

kubernetes Python 客户端中的 V1StatusCause 模型:解析 API 错误原因与序列化机制

在 kubernetes(Kubernetes 官方 Python 客户端)中,当 API 调用失败时,服务端返回的 `Status` 对象里会携带结构化的错误原因信息。`V1StatusCause` 正是描述“某一个具体字段导致了哪一类错误”的数据模型。本文基于异步客户端(aio)的模块参考文档 [kubernetes.aio.client.models.v1_status_cause.rst]

gitblog_00885的博客 403

改存档别再啃十六进制了:免费开源的暗黑破坏神2存档编辑器 5 分钟快速上手

你是否有过这样的经历:辛辛苦苦刷出来的极品装备,因为一次手滑存档损坏,几十小时的心血直接清零?想测试一套新 build,却要从头再练一遍级?面对满屏的十六进制数字,想改个金币数量都无从下手? 其实这些痛点,现在都可以用一款免费开源工具轻松化解——**d2s-editor**,一款专为暗黑破坏神2玩家打造的可视化存档编辑器。它用图形化界面替代枯燥的代码修改,同时兼容经典版 D2 与重制版 D2R,

gitblog_00247的博客 161

Joplin 如何兼容 R Markdown 的 YAML Front Matter:以 r-markdown.md 测试样例解析导入实现

Joplin 在桌面端与命令行版中内置了「Markdown + Front Matter」导入/导出能力,能够读取笔记文件顶部的 YAML 元数据块并映射为笔记属性。本文以仓库测试夹具 [r-markdown.md](https://link.gitcode.com/i/3f1ac72ccdd52635541f78e52438f26f) 为对象,逐字段拆解 R Markdown / pandoc

gitblog_01089的博客 245

你以为 MyBatis-Plus 单表是 yyds?这场心智负担的比拼,它从一开始就输了

👉延伸阅读:持久层的主战场,从来都是联表很多人觉得,不就是单表增删改查吗,能有多大差距?恰恰是这种「大家都能做」的基础场景,最能看出框架的设计功力。差的框架,把功能堆给你就完事了,你要记配置、踩坑、切换多套体系,心智负担全甩给开发者;好的框架,让你用的时候几乎感觉不到它的存在——不用记一堆规则,不用怕踩歧义的坑,不用在多套 API 之间反复横跳。Spring JDBC Ultra 就是后者。

gzz_gzz的博客 374
上一篇: java的登山历程
下一篇: 旧逻辑兼容整改之其他方案(分二)
devilnumber
博客等级 码龄12年 19粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值