李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 走心评论
  • 系列文章
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

Java 为什么有这么多 “O”?

2025年5月16日 约 258 字1 分钟 335点热度 0人点赞 1条评论
本文最后更新于 2025年5月16日,距今已 427 天,其中的信息可能已经发生变化,请注意甄别。

面试中被问到“Java为什么有这么多‘O’,比如PO、DTO、VO、BO”,我之前的回答不够系统,复盘时发现自己对这些“O”的理解和串联不够清晰。本文以一个基于Spring Boot + MyBatis的用户查询接口为例,解析各“O”的定位、必要性及对象转换优化方案。

一、场景:用户查询接口

需求:前端通过GET /user?userId=123查询用户信息,后端返回姓名和注册天数。
技术栈:Spring Boot + MyBatis。

二、请求链路分析

1. Controller层:入参是DTO

public class UserQueryDTO {
    private Long userId;
    private Integer page;
    private Integer size;
    // getters and setters
}

@RestController
public class UserController {
    private final UserService userService;

    @GetMapping("/user")
    public UserVO getUser(@RequestParam UserQueryDTO queryDTO) {
        return userService.getUserInfo(queryDTO);
    }
}

DTO(Data Transfer Object)角色:

  • 定位:数据传输对象,封装前端输入参数。
  • 作用:
    • 结构化参数,便于使用@Valid注解校验。
    • 避免多个参数散落在方法签名中,提升可读性。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/article/4402

推荐阅读

  • 以面试官视角万字解读线程池10大经典面试题
  • SpringBoot常用注解
  • CompletableFuture使用详解
  • 金融级JVM深度调优实战的经验和技巧
  • SpringBoot 中内置的 49 个常用工具类
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA 对象 面试
最后更新:2025年5月16日
相关文章
  • 何时重构?2019年6月26日
  • 分布式锁-Java常用技术方案2019年11月11日
  • UUID太长怎么办?快来试试NanoId2022年3月31日
  • joda DateTime自定义格式&计算两个日期相差天数2019年8月2日
  • SpringBoot 中内置的 49 个常用工具类2025年5月26日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

  • GoodBoyboyLv 2

    Object(bushi)

    WindowsFirefox 131.0 中国-长沙市
    2025年6月23日
    00 回复
  • 娉娉袅袅十三余,豆蔻梢头二月初。
    春风十里扬州路,卷上珠帘总不如。

    听点儿音乐吧 朋友~
    文章目录

    那年今日(07月18日)

    • 1936年:西班牙内战爆发
    • 1902年:日本政治家西乡从道逝世
    • 1817年:英国作家简·奥斯汀逝世
    • 1635年:英格兰物理学家胡克出生
    • 155年:三国时期著名的政治家、军事家、诗人曹操出生
    • 更多历史事件
    最新 热点 随机
    最新 热点 随机
    增加了两套复古皮肤-牛皮纸、千禧网页 Claude Design介绍与使用 Kratos+主题新功能介绍 Taste Skill 说明与使用 jasypt-spring-boot 使用说明 Kratos+主题新功能预览及功能演示
    AI时代,个人技术博客的出路在哪里?这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了做了一个WordPress文章热力图插件千万级大表新增字段实战指南:告别锁表与业务中断
    在 Visual Studio 中生成和清理项目和解决方案 Mac版 ConcurrentHashMap常用方法源码解析(jdk1.8) 我的第一个WordPress插件:Dylan Custom Plugin上线了 n8n深度解析:可视化编排与灵活拓展的双引擎驱动 我要狠狠的反驳“公司禁止使用 Lombok ”的观点! 精通Linux根目录:核心文件夹深度解析与实战指南
    最近评论
    皮皮社长 发布于 10 小时前(07月17日) 李哥你这也太复古了点吧, :37: 你这主题排版得好,我的主题不行,主要是不懂代码,都是ai搞的。
    李锋镝 发布于 4 天前(07月14日) 外面的主题功能差异化比较大,部分功能没有还得通过插件来实现,这样样式也不统一,而且经常有爆出风险、漏...
    瓦匠 发布于 4 天前(07月14日) 很奈斯啊,都在设计属于自己的主题了,羡慕了
    rxshc 发布于 5 天前(07月13日) 工具看着挺实用的。
    李锋镝 发布于 1 周前(07月09日) https://github.com/Leonxlnx/taste-skill
    标签聚合
    SpringBoot MySQL IDEA 日常 SQL Spring 设计模式 AI MCP Redis 多线程 数据库 分布式 K8s ElasticSearch AI编程 架构 JVM WordPress JAVA
    友情链接
    • Blogs·CN
    • Honesty
    • Mr.Sun的博客
    • 临窗旋墨
    • 哥斯拉
    • 彬红茶日记
    • 志文工作室
    • 懋和道人
    • 拾趣博客导航
    • 搬砖日记
    • 旧时繁华
    • 林羽凡
    • 瓦匠个人小站
    • 皮皮社
    • 知向前端
    • 韩小韩博客
    • 风渡言

    COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

    域名年龄

    Theme Kratos+ By Dylan Li

    津ICP备2024022503号-3

    京公网安备11011502039375号