当前位置: 首页 > news >正文

dto 转entity方法

一、正确思路(先记住这句)

Controller 收 DTO → Service 转 Entity → Mapper 写表

永远不要让 DTO 直接进 Mapper。


二、最常用、最推荐的转换方式(✅ 强烈推荐)

✅ 使用BeanUtils.copyProperties

示例场景

DTO(比实体多两个字段)
publicclassUserSaveDTO{privateLonguserId;privateStringuserName;privateStringpassword;// DTO 多出来的字段privateStringconfirmPassword;privateStringcode;}
Entity
publicclassSysUserextendsBaseEntity{privateLonguserId;privateStringuserName;privateStringpassword;}

Service 中转换

@ServicepublicclassSysUserService{publicvoidsaveUser(UserSaveDTOdto){// 1. DTO -> EntitySysUseruser=newSysUser();BeanUtils.copyProperties(dto,user);// 2. 处理多余字段(DTO 有,Entity 没有)user.setCreateTime(newDate());// 3. 入库sysUserMapper.insert(user);}}

只复制同名同类型字段
✅ DTO 多的字段会被自动忽略
✅ 非常干净、可读性高


三、如果字段名不一样怎么办?

DTO

privateStringpwd;

Entity

privateStringpassword;

手动赋值即可

user.setPassword(dto.getPwd());

四、若依官方更优雅的方式(✅ 推荐)

若依里通常会这样写:

SysUseruser=BeanUtils.copyBean(dto,SysUser.class);

或直接封装一个convert方法:

publicclassUserConvert{publicstaticSysUsertoEntity(UserSaveDTOdto){SysUseruser=newSysUser();BeanUtils.copyProperties(dto,user);returnuser;}}

Service 中:

SysUseruser=UserConvert.toEntity(dto);sysUserMapper.insert(user);

✅ 解耦
✅ 好维护
✅ 后期加字段不怕乱


五、DTO 中带“校验字段”的正确处理方式(你现在的场景)

比如:

  • confirmPassword:只做校验
  • code:只做验证码校验
publicvoidsaveUser(UserSaveDTOdto){// 1. 校验 DTOif(!dto.getPassword().equals(dto.getConfirmPassword())){thrownewRuntimeException("两次密码不一致");}// 2. DTO -> EntitySysUseruser=newSysUser();BeanUtils.copyProperties(dto,user);// 3. 入库sysUserMapper.insert(user);}

校验用 DTO
持久化用 Entity
绝不混用


六、❌ 千万不要这样做(反例)

sysUserMapper.insert(dto);// ❌ 错误

❌ DTO 污染数据库
❌ 后期字段变动爆炸
❌ 不符合分层设计


七、进阶:MapStruct(企业级项目)

如果你项目规模大,推荐用MapStruct

@MapperpublicinterfaceUserConvert{SysUsertoEntity(UserSaveDTOdto);}

✅ 编译期生成代码
✅ 性能最好
✅ 类型安全

(若依 Cloud 版就在用)


八、一句话总结

DTO 接前端 → 手动 / BeanUtils 转 Entity → Entity 入库
DTO 多出来的字段,在 Service 里处理或忽略即可

如果你愿意,我可以帮你:

  • 写一个若依风格的 Convert 工具类
  • 看你现在 DTO 的字段,帮你设计最合理的转换方式
  • 讲清楚什么时候用 DTO / VO / Entity

你可以直接把你现在的 DTO 贴出来 👍

http://www.jsqmd.com/news/912927/

相关文章:

  • 银河麒麟V10系统下,用vsftpd搭建FTP服务器的保姆级避坑指南
  • 基于框架的Token Curated Registries:构建去中心化策展系统的开发指南
  • 从CAD到遥控车:工程原理与CNC/3D打印混合制造全流程实战
  • 2025-2026年北京定制游旅行社推荐:口碑好的服务企业团建方案落地难案例 - 品牌推荐
  • 深入IOMMU/SMMUv3:从dma_map_sg()看Linux如何为设备打造‘连续’IOVA视图
  • 别再手动改模型测Bug了!手把手教你用Simulink Test Harness搭建专属单元测试环境
  • 2026年5月25-30万五座SUV车型推荐:TOP5排名专业评测价格注意事项 - 品牌推荐
  • 2026年杭州权威赋能教育学校评测:浙江青少年叛逆学校、浙江青少年夜不归宿、浙江青少年心理咨询学校、浙江青少年心理辅导学校选择指南 - 优质品牌商家
  • 如何告别多显示器鼠标跳跃?LittleBigMouse的智能DPI感知技术揭秘
  • 离线环境救星:手把手教你用DISM命令搞定Win10 .NET 3.5安装(告别0x8024402c错误)
  • Claude解析LP问题失败?深度拆解7类语法歧义、约束冲突与目标函数坍塌场景,附可复现Notebook
  • 基于树莓派Pico 2与CircuitPython的MIDI合成器与控制器开发实战
  • 告别手写代码!用Roboflow的Auto-Augment功能,5分钟搞定YOLO数据集增强
  • 国内合规垫圈生产企业实测排行:防松垫圈、垫圈定制、DTI垫圈、压力指示垫圈、双叠自锁垫圈、接地垫圈、垫圈选择指南 - 优质品牌商家
  • 【Lindy课程管理自动化实战指南】:20年教育技术专家亲授5大不可绕过的自动化陷阱与避坑清单
  • 成都H型钢,成都工字钢,成都中板,成都中厚板|国标现货批发,钢厂直供 - 四川盛世钢联营销中心
  • 2026年国内换热器板片TOP5供应商实力盘点:钛板板式换热器/间壁式板式换热器/BR系列板式冷却器/不锈钢板式换热器/选择指南 - 优质品牌商家
  • Win11 WSL2 + Ubuntu 18.04:手把手教你配置ROS开发环境并跑通第一个rviz
  • 提示工程实战:四大核心心法与进阶技巧,让AI从玩具变生产力工具
  • 全变更蒸馏:让AI编程成为一个可进化的系统
  • 2026年5月留香沐浴露品牌推荐:十大排名运动后留香评测专业价格 - 品牌推荐
  • 短视频矩阵获客系统的设计与实践:提升企业数字营销效率的路径
  • Lindy自动化筛简历到底准不准?深度拆解NLP匹配算法+真实招聘数据验证(准确率92.7%实测报告)
  • 哪家25-30万五座SUV车型专业?2026年5月推荐TOP10通勤舒适评测案例适用场景 - 品牌推荐
  • BilibiliCacheVideoMerge终极指南:安卓B站缓存视频合并与弹幕播放完整解决方案
  • 2026年5月工控主板厂家推荐:口碑好的产品解决产线高温死机问题 - 品牌推荐
  • Sysinternals Autoruns实战:从“计划任务”里挖出潜伏的挖矿脚本(附排查思路)
  • go: Bounded Parallelism Pattern
  • 2026年成都青少年叛逆教育基地科学选型全维度指南:成都叛逆青少年管教所、成都哪里有叛逆少年管教学校、成都无体罚叛逆少年教育机构选择指南 - 优质品牌商家
  • 基于大语言模型的生成式智能体架构设计与应用实践