dto 转entity方法

张开发
2026/6/6 23:49:01 15 分钟阅读

分享文章

dto 转entity方法
一、正确思路先记住这句✅Controller 收 DTO → Service 转 Entity → Mapper 写表永远不要让 DTO 直接进 Mapper。二、最常用、最推荐的转换方式✅ 强烈推荐✅ 使用BeanUtils.copyProperties示例场景DTO比实体多两个字段publicclassUserSaveDTO{privateLonguserId;privateStringuserName;privateStringpassword;// DTO 多出来的字段privateStringconfirmPassword;privateStringcode;}EntitypublicclassSysUserextendsBaseEntity{privateLonguserId;privateStringuserName;privateStringpassword;}Service 中转换ServicepublicclassSysUserService{publicvoidsaveUser(UserSaveDTOdto){// 1. DTO - EntitySysUserusernewSysUser();BeanUtils.copyProperties(dto,user);// 2. 处理多余字段DTO 有Entity 没有user.setCreateTime(newDate());// 3. 入库sysUserMapper.insert(user);}}✅只复制同名同类型字段✅ DTO 多的字段会被自动忽略✅ 非常干净、可读性高三、如果字段名不一样怎么办DTOprivateStringpwd;EntityprivateStringpassword;手动赋值即可user.setPassword(dto.getPwd());四、若依官方更优雅的方式✅ 推荐若依里通常会这样写SysUseruserBeanUtils.copyBean(dto,SysUser.class);或直接封装一个convert方法publicclassUserConvert{publicstaticSysUsertoEntity(UserSaveDTOdto){SysUserusernewSysUser();BeanUtils.copyProperties(dto,user);returnuser;}}Service 中SysUseruserUserConvert.toEntity(dto);sysUserMapper.insert(user);✅ 解耦✅ 好维护✅ 后期加字段不怕乱五、DTO 中带“校验字段”的正确处理方式你现在的场景比如confirmPassword只做校验code只做验证码校验publicvoidsaveUser(UserSaveDTOdto){// 1. 校验 DTOif(!dto.getPassword().equals(dto.getConfirmPassword())){thrownewRuntimeException(两次密码不一致);}// 2. DTO - EntitySysUserusernewSysUser();BeanUtils.copyProperties(dto,user);// 3. 入库sysUserMapper.insert(user);}✅校验用 DTO✅持久化用 Entity✅绝不混用六、❌ 千万不要这样做反例sysUserMapper.insert(dto);// ❌ 错误❌ DTO 污染数据库❌ 后期字段变动爆炸❌ 不符合分层设计七、进阶MapStruct企业级项目如果你项目规模大推荐用MapStructMapperpublicinterfaceUserConvert{SysUsertoEntity(UserSaveDTOdto);}✅ 编译期生成代码✅ 性能最好✅ 类型安全若依 Cloud 版就在用八、一句话总结✅DTO 接前端 → 手动 / BeanUtils 转 Entity → Entity 入库✅DTO 多出来的字段在 Service 里处理或忽略即可如果你愿意我可以帮你写一个若依风格的 Convert 工具类看你现在 DTO 的字段帮你设计最合理的转换方式讲清楚什么时候用 DTO / VO / Entity你可以直接把你现在的 DTO 贴出来

更多文章