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

企业标准 DTO 传参 + Controller + Service + 拷贝工具类完整版


1)先写两个 DTO(新增、修改)

ShopSaveDTO.java(新增用)

import lombok.Data; import java.math.BigDecimal; @Data public class ShopSaveDTO { private String name; private String address; private Long typeId; private String phone; private BigDecimal avgPrice; }

ShopUpdateDTO.java(修改用)

import lombok.Data; import java.math.BigDecimal; @Data public class ShopUpdateDTO { private Long id; // 修改必须传id private String name; private String address; private Long typeId; private String phone; private BigDecimal avgPrice; }

2)Controller(完整,接收 DTO)

import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @RestController @RequestMapping("/shop") public class ShopController { @Resource private ShopService shopService; // 查询 @GetMapping("/{id}") public Result queryById(@PathVariable Long id) { return shopService.queryById(id); } // 新增(接收 ShopSaveDTO) @PostMapping public Result saveShop(@RequestBody ShopSaveDTO dto) { return shopService.saveShop(dto); } // 修改(接收 ShopUpdateDTO) @PutMapping public Result updateShop(@RequestBody ShopUpdateDTO dto) { return shopService.updateShop(dto); } // 删除 @DeleteMapping("/{id}") public Result deleteShop(@PathVariable Long id) { return shopService.deleteShop(id); } }

3)Service 接口

import com.baomidou.mybatisplus.extension.service.IService; public interface ShopService extends IService<Shop> { Result queryById(Long id); Result saveShop(ShopSaveDTO dto); Result updateShop(ShopUpdateDTO dto); Result deleteShop(Long id); }

4)ServiceImpl(完整 + BeanUtils.copyProperties)

import org.springframework.beans.BeanUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.redis.core.StringRedisTemplate; @Service public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements ShopService { @Resource private StringRedisTemplate stringRedisTemplate; @Resource private CacheClient cacheClient; private static final String CACHE_SHOP_KEY = "cache:shop:"; // ====================== 查询(你原来的逻辑)====================== @Override public Result queryById(Long id) { Shop shop = cacheClient.queryWithPassThrough( CACHE_SHOP_KEY, id, Shop.class, this::getById, 30L, java.util.concurrent.TimeUnit.MINUTES ); if (shop == null) { return Result.fail("店铺不存在"); } return Result.ok(shop); } // ====================== 新增 ====================== @Override @Transactional public Result saveShop(ShopSaveDTO dto) { Shop shop = new Shop(); BeanUtils.copyProperties(dto, shop); // DTO → 实体 save(shop); return Result.ok(); } // ====================== 修改 ====================== @Override @Transactional public Result updateShop(ShopUpdateDTO dto) { Shop shop = new Shop(); BeanUtils.copyProperties(dto, shop); // DTO → 实体 updateById(shop); // 删除缓存 stringRedisTemplate.delete(CACHE_SHOP_KEY + dto.getId()); return Result.ok(); } // ====================== 删除 ====================== @Override @Transactional public Result deleteShop(Long id) { removeById(id); stringRedisTemplate.delete(CACHE_SHOP_KEY + id); return Result.ok(); } }
http://www.jsqmd.com/news/610492/

相关文章:

  • SecGPT-14B长文本优化:解决OpenClaw安全报告截断问题
  • OpenClaw浏览器自动化:千问3.5-9B实现智能网页操作
  • 郭老师-对钱没概念,正在摧毁你的人生
  • Mellanox网卡固件与驱动一站式管理:从MFT工具到mlxup实战解析
  • 别再为地图坐标发愁了!手把手教你用gcoord这个3KB的JS库搞定百度高德互转
  • 别光调参了!手把手教你用YOLO Master项目给YOLOv8/v10/v11换‘心脏’(Backbone实战)
  • 基于STM32的智能录音机设计与实现
  • 从Prompt到Agent:基于Qwen构建智能工作流的避坑指南(含LangChain配置)
  • IFC格式是什么?用什么软件可以打开?
  • 锐捷校园网破解:如何用普通路由器实现无感认证(含MAC地址克隆避坑指南)
  • Rust环境管理进阶:如何通过RUSTUP_HOME和CARGO_HOME实现多版本隔离与便携安装
  • AV1 码流 RTP 封装
  • 打包后读取到 NODE_ENV=production + 配置的 BASE_URL/ 自定义变量
  • 2026年碑好的沈阳工厂搬家公司用户好评推荐 - 行业平台推荐
  • 产教融合共建失智老年人照护实训室实践路径
  • OpenClaw夜间值守:Qwen3.5-9B监控服务器报警截图
  • DRV8718智能驱动技术揭秘:从多级栅极控制到汽车座椅应用实战
  • 武汉高三复读班机构排名
  • 可信AI:政务智能化建设中的伦理与安全框架
  • LangChain4j的ChatMemoryProvider实战:如何为不同用户/线程创建独立的AI对话记忆?
  • 半导体芯片展哪家好?平台汇聚,打通芯片设计制造封测全链 - 品牌2026
  • Redis性能调优实战:如何用libjemalloc替代glibc内存分配器
  • 基于转子磁链模型的滑模观测器改进:自适应反馈增益拓宽低速运行区间仿真研究
  • 【建议收藏】数据人转型AI大模型全攻略:零基础入门,高薪就业不是梦
  • 2026年液冷规模化元年:全球科技巨头整体转向液冷
  • FastAPI + Vue3 + Vite 跨域报错全解:从 `Access-Control-Allow-Origin missing` 到彻底修复
  • 告别命令行恐惧!用Docker Desktop可视化界面5分钟搞定Ollama部署(附端口映射避坑指南)
  • JMS, ActiveMQ 学习一则谝
  • Python拉取视频流的性能优化实战
  • 2026年比较好的铜陵全屋定制用户好评公司 - 行业平台推荐