论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
分布式数据库
›
Spring学习条记05——Spring Boot的文件布局2(POJO类) ...
Spring学习条记05——Spring Boot的文件布局2(POJO类)
飞不高
论坛元老
|
2025-3-26 09:10:14
|
显示全部楼层
|
阅读模式
楼主
主题
1535
|
帖子
1535
|
积分
4605
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
在Spring Boot项目中,将Entity、DTO、VO放在POJO子模块中是一种常见的分层设计,它们各自尊担差别的职责,通过一个通俗的例子来表明它们的作用:
POJO(Plain Old Java Object)是指普通的、简单的Java对象,只有属性和对应的setter和getter方法,不依赖于任何特定的框架、接口或父类。它的核心头脑是保持代码的简洁性和可移植性,避免与特定技术绑定。
Entity、DTO、VO 都属于 POJO,它们是具有特定用途的POJO。下面具体讲解。
1. Entity(实体)
作用
:
直接对应数据库表
,用于ORM框架(如Hibernate)操作数据库。
特点
:字段与数据库表严格一致,可能包罗关联关系(如外键)。
示例
:
假设有一个用户表user,包罗字段:id、username、password、email、create_time。
对应的Entity类如下:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String email;
private LocalDateTime createTime;
// Getters and Setters
}
复制代码
2. DTO(Data Transfer Object,数据传输对象)
作用
:
在层间(如Controller层和Service层)通报数据
,屏蔽敏感字段,或适配差别场景的输入。
特点
:字段可能与Entity差别,比方排除敏感信息(如密码),或组合多个Entity的字段。
示例
:
用户注册时,前端可能只必要提交username、password、email,不必要id和create_time。
对应的DTO类如下:
public class UserDTO {
private String username;
private String password;
private String email;
// Getters and Setters
}
复制代码
使用场景
:
Controller吸收到UserDTO后,将其转换为User实体,再交给Service层生存到数据库。
避免了直接暴露Entity布局,提升安全性(比方密码加密后再存储)。
3. VO(View Object,视图对象)
作用
:
返回给前端的展示数据
,定制化字段,适配前端需求。
特点
:字段可能与Entity差别较大,比方排除敏感信息、格式化时间、组合多个数据源的结果。
示例
:
查询用户信息时,前端必要id、username、email和格式化后的createTime,但不必要password。
对应的VO类如下:
public class UserVO {
private Long id;
private String username;
private String email;
private String formattedCreateTime; // 例如:2024-01-01 12:00:00
// Getters and Setters
}
复制代码
使用场景
:
Service层查询到User实体后,将其转换为UserVO,再通过Controller返回给前端。
避免暴露数据库细节,提升接口灵活性。
总结:三者的协作流程
用户注册
:
前端提交UserDTO → Controller吸收 → Service层将UserDTO转为User实体 → 存入数据库。
查询用户信息
:
Service层查询User实体 → 转为UserVO → Controller返回UserVO给前端。
备注:主流规范的做法应该是Controller吸收到DTO后,在Controller层将DTO转为Entity,再交给Service处理。在一些极简单项目(不严格分层时),也可能会由Service层进行转换。
关键区别
类型用途字段特点生命周期Entity直接操作数据库与数据库表严格一致持久化层(数据库操作)DTO层间数据传输(如Controller ↔ Service)可能比Entity少字段,或增加校验逻辑哀求处理阶段VO返回给前端的展示数据定制化字段,适配前端需求响应天生阶段
为什么分层?
安全性
:避免将Entity直接暴露给前端(如隐藏密码)。
灵活性
:Entity、DTO、VO可独立变化,互不影响(比方数据库字段变更只需调整Entity)。
解耦
:各层职责清晰,Controller不依赖数据库布局,Service不依赖前端需求。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
飞不高
论坛元老
这个人很懒什么都没写!
楼主热帖
Java集合的lastlastIndexOfSubList()方 ...
WPF开发经验-实现自带触控键盘的TextBo ...
如何在 K8S 集群范围使用 imagePullSec ...
【关系型数据库】事务特性及事务隔离级 ...
Python批量采集百度资讯文章,如何自定 ...
微信小程序集合3(百度小说+电商+仿哗 ...
MapReduce开发
瓦片地图
浅谈售前的业务思维
Navicat 连接服务器不成功(Access den ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
图数据库
快速回复
返回顶部
返回列表