发布时间:2026/7/17 17:02:40
Java 中 POJO、Entity、DTO、VO、Param 等对象区别是什么?
目录一.概述二. POJO的含义三. entity(实体)四. model(模型)五. domain(域)六. view(视图)七. DTO(数据传输对象)八. VO(真正视图层)九. Param(参数)十. 总结一.概述在日常开发的过程中如果我们接手一个新的项目之后通常会有各种各样的包想要搞清楚项目的基本架构当然就需要知道各种包做什么用的里面存放了那些东西。以便于我们理解项目的整体结构。我们都知道项目是要和数据库打交道的数据库中的一张表映射到Java代码种是一个实体类。在形目中我们通常会发现实体类用很多种不同的定义方法有叫 entity 的有叫 domain 的有叫 model 的有叫 pojo 的到底哪一种是最规范的呢本篇我们就来说说它们的区别。二. POJO的含义POJO 英文全称Plain Ordinary Java Object译为普通的 Java 对象就是常说的 JavaBean 对象通常会定义 Getter 和 Setter 方法以便于我们在业务层对对象属性值的存取操作。而 entitydomainmodelviewDTOVO都可以理解为 JavaBean也都可以理解为POJOPOJO是它们的抽象但是细分它们的区别还是会有所不同的。三. entity(实体)entity 实体类中的属性通常与数据库中的一张表的字段完全相应。如下是一张用户表 user表中有以下六个字段值那么 user 表对应的 entity 实体类 User 如下所示通常类中的字段会与数据库表中的字段一一对应Data public class User { private Long uid; private String username; private String password; private int age; private String email; private String sex; }除此之外还会有一些特殊情况比如所有的 entity 类可能都会继承某个基类 BaseEntity就拿上面的 user 表来说如果 user 数据库表中定义了 BaseEntity 类中的四个字段通常都是需要去继承BaseEntity类的如果 user 数据库表中没有定义 BaseEntity 类中的四个字段那么 user 类可以选择继承 BaseEntity 类也可以选择不继承 BaseEntity 类。换句话来说就是JavaBean 类中定义的属性可以比数据库表中的字段多也可以和数据库表中的字段相等也可以比数据库中的字段少但一般情况下都是一一对等的关系。Data public class BaseEntity { private String createUsername; private Date createTime; private String updateUsername; private Date updateTime; }四. model(模型)model 实体类中的属性通常可能含有数据库中多张表的字段有些业务中我们可能会去操作多张表。举个例子假如说某个业务需要查询AB两张表A表中有一个a1a2a3字段B表中有一个b1b2b3字段。SELECT A.*,B.* FROM A INNER JOIN B ON A.a1 B.b1 WHERE A.a2 #{model.a2} AND B.b2 #{model.b2}这个时候加入我们想要用一个实体类传参达到效果就必然要求这个实体类中既含有A类中字段属性有含有B表中的字段属性这种实体类我们就可以称之为 model 实体类Data public class SelectModel { private String a2; private String b2; }五. domain(域)domain 中通常可能含有多张表映射的 Java 对象还有一种业务需求可能需要查询多张表然后将查询到的数据全部返回此时我们就可以创建另外一种实体类该实体类中的属性不是八种基本数据类型而是其他自定义实体类我们将查询到但表数据封装到对应的实体类中再将多张表查询到的数据汇总到一起封装到 Domain 类中这就是域Data public class SelectDomain { private xxxEntity1 entity1; private xxxEntity2 entity2; private xxxEntity2 entity3; }六. view(视图)view 中通常含有数据库中多张表的部分字段视图我们就可以理解为呈现的东西在程序中视图就是展示给用户的数据。举个栗子如下为用户表对应的实体类 UserData public class User { private Long uid; private String username; private String password; private int age; private String email; private String sex; }在实际的业务中假设用户登陆成功我们不一定需要将用户的密码也展示出来也不一定需要将用户的ID展示出来假设用户登陆后只显示用户名和邮箱我们就重新定义一个视图实体类 UserView里面只定义 username 和 email 两个属性由此就有了视图 view在 view 中我们只会定义需要展示给用户看的字段属性这样我们在进行数据库查询的时候也是只查询这两个字段的值返回值类型就是用 UserView 来接收而不使用 User 实体类来接收减少了数据的传输Data public class UserView { private String username; private String email; }七. DTO(数据传输对象)和上面的 view 非常类似只是叫法名称不同八. VO(真正视图层)VO 就是我真正展示给用户去看的数据字段VO全称 View Object视图对象很多小伙伴可能会有疑惑DTO和view不是已经起到了视图层数据传输的效果了吗为什么还要使用VO呢其实不然小伙伴们可能知道在一些庞大复杂的项目中数据库表和表之间的外键约束会非常密切这样一来我们数据库表中存储的数据大多都是其他表的主键ID并不会存储具体的信息。这样一来我们数据库查询之后得到了一堆其它表的主键ID但这并不是我们想要的结果所以我们需要在业务层再去根据这些主键ID去各自对应的数据库表中查询用户想要的数据然后在返回查询到的数据我们通常会使用VO类来进行接收查询完毕我们将VO返回给前端展示这才算是一个业务流程真正完成。九. Param(参数)通常封装对数据库中字段做修改的数据或查询条件属性业务层中的方法大多都会采用实体类型传参因此通常会定义一个xxxParam实体类实体类中封装一些要对数据库表中字段进行修改的操作或是查询条件字段十. 总结虽然上面它们细分下来会有一些不同但在实际的项目中开发人员不一定会严格按照它们的规范去进行开发但一个项目中一般都会包含以下集中实体类型。第一种entityPOJO 实体数据访问层专门用来对数据库单表进行数据操作第二种viewDTO 数据传输层通常用作接收单表或夺表查询到的部分字段第三种VO 视图层通常用于存储页面真正展示的数据第四种Param 参数实体通常用于封装前端传递过来的数据后端可以根据Param中的参数对单表或多表进行CRUD操作

相关新闻

微信聊天记录批量导出完整指南:WeChatMsg命令行工具终极教程
2026/7/17 17:02:40

微信聊天记录批量导出完整指南:WeChatMsg命令行工具终极教程

微信聊天记录批量导出完整指南:WeChatMsg命令行工具终极教程 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…

阅读更多
如何将现有Rust项目迁移到error-chain:7步完整迁移指南
2026/7/17 16:02:40

如何将现有Rust项目迁移到error-chain:7步完整迁移指南

如何将现有Rust项目迁移到error-chain:7步完整迁移指南 【免费下载链接】error-chain Error boilerplate for Rust 项目地址: https://gitcode.com/gh_mirrors/er/error-chain 想要为你的Rust项目提供一致且强大的错误处理体验吗?error-chain库正…

阅读更多
批量读取并合并数据
2026/7/17 16:02:40

批量读取并合并数据

我记录自动化办公踩坑实录:帮客户把报表耗时从48小时压到2小时前不久接了个内部提效的活儿,客户是一家做跨境电商的中大型公司,财务和运营团队每个月底都要对着十几份Excel表手动核对数据、拼接报表。说实话,他们之前全靠人工搬运…

阅读更多
【Springboot毕设全套源码+文档】基于java的网吧管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
2026/7/17 18:02:41

【Springboot毕设全套源码+文档】基于java的网吧管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

阅读更多
【Springboot毕设全套源码+文档】基于Java的外卖系统的设计与实现(丰富项目+远程调试+讲解+定制)
2026/7/17 18:02:41

【Springboot毕设全套源码+文档】基于Java的外卖系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

阅读更多
【Springboot毕设全套源码+文档】基于SpringBoot的农产品溯源系统的设计与实现(丰富项目+远程调试+讲解+定制)
2026/7/17 18:02:41

【Springboot毕设全套源码+文档】基于SpringBoot的农产品溯源系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

阅读更多
C++语言基础5:构造函数
2026/7/17 18:02:41

C++语言基础5:构造函数

什么是构造函数 构造函数(Constructor)是面向对象编程(C/Java/C#等)中一个极其特殊的成员函数。它的核心作用就是一句话:用来“制造”并“初始化”一个对象。 通俗地打个比方:类(Class&#x…

阅读更多
告别人工熬夜审单!IACheck AI报告审核批量核验提速80%,重塑检测行业效率标杆
2026/7/17 18:02:41

告别人工熬夜审单!IACheck AI报告审核批量核验提速80%,重塑检测行业效率标杆

在检验检测TIC行业业务量持续激增的当下,海量检测单据、成套报告文档的审核核验工作,已然成为各大检测机构、企业质检板块及政企事业单位提质增效的核心卡点,传统依靠人工逐份校对、逐条核验、手动纠错的单据审核模式,不仅跟不上行…

阅读更多
3分钟掌握QRemeshify:让Blender三角网格秒变规整四边形
2026/7/17 17:02:41

3分钟掌握QRemeshify:让Blender三角网格秒变规整四边形

3分钟掌握QRemeshify:让Blender三角网格秒变规整四边形 【免费下载链接】QRemeshify A Blender extension for an easy-to-use remesher that outputs good-quality quad topology 项目地址: https://gitcode.com/gh_mirrors/qr/QRemeshify 你是否曾为Blende…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/16 21:32:43

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/16 15:03:34

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/16 22:47:50

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制
2026/7/17 0:02:36

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

阅读更多
HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式

Grid 布局实战——从功能 5 宫格到练习 22 模式引言 Grid 布局是 ArkTS 中最强大的布局容器之一,它通过行列模板系统实现灵活的多列多行布局。在本英语学习 App 中,Grid 布局贯穿了首页的多个核心模块:功能栏 5 宫格、练习模式 22 卡片、以及…

阅读更多
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/17 5:10:40

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/17 5:34:11

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/17 7:48:38

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多