查看“Java 中,DAO 返回的查询结果用 DTO 封装还是 PO 封装?”的源代码
←
Java 中,DAO 返回的查询结果用 DTO 封装还是 PO 封装?
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
一般来说,Persistent Object (PO) 通常用于映射数据库中的数据,一个 PO 准确对应数据库的一张表没什么问题, dao.save(po)、.delete()、 .update()、 .list(),PO 都够用, 让我困惑的是,实际应用场景中更多的是查询结果需要一个各个属性对应的多个字段来自多张表的对象,这个对象并不是和数据库中的某一张表的某条数据对应的关系, 那么应该怎么处理这种情况? 以下是 chatgpt 的回答: 在 Java 中,推荐使用 Data Transfer Object (DTO) 封装 DAO 返回的查询结果。 DTO 专门用于封装数据并在不同的层之间传递,而 Persistent Object (PO) 通常用于映射数据库中的数据。 使用 DTO 而不是 PO 可以隔离业务逻辑和数据访问层,降低耦合性,并保证代码的可维护性和可扩展性。 那也就是说,对于单个查询业务的场景(尤其是需求还比较复杂的),可以单独抽象出一个 DAO 负责查询,然后将查询结果封装到一个抽象出来的 DTO 里。 这么看 DAO 确实既可以返回 PO,也应该可以返回 DTO 的。 毕竟如果一个对象的字段并不是对应某一张表的一条数据(比如它是个 group by、sum 统计汇总产生的对象), 那么它本身就不符合 PO Persistent Object 持久化对象的定义,它的存在就是为了封装查询结果的,就是个 DTO data transfer object,数据传输对象。 嗯,这样确实也有利于扩展,而且尤其符合设计模式的 单一职责原则。
返回至
Java 中,DAO 返回的查询结果用 DTO 封装还是 PO 封装?
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
Spring Boot 2 零基础入门
Spring Cloud
Spring Boot
设计模式之禅
VUE
Vuex
Maven
算法
技能树
Wireshark
IntelliJ IDEA
ElasticSearch
VirtualBox
软考
正则表达式
程序员精讲
软件设计师精讲
初级程序员 历年真题
C
SQL
Java
FFmpeg
Redis
Kafka
MySQL
Spring
Docker
JMeter
Apache
Linux
Windows
Git
ZooKeeper
设计模式
Python
MyBatis
软件
数学
PHP
IntelliJ IDEA
CS基础知识
网络
项目
未分类
MediaWiki
镜像
问题
健身
国债
英语
烹饪
常见术语
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息