当前位置: 首页 > 知识库问答 >
问题:

java - VO、DTO、BO、PO、DO、POJO 如何实际使用?

阙阳
2024-02-20
  1. 创建、更新,各层入参使用什么O命名(controller -> service -> dao)
  2. ID查询和分页查询,各层出参数使用什么O命名(dao -> service -> controller)
  3. 查询也可能是多个接口返回数据组合起来
  4. 抽取出的公共业务方法,入参和出参使用什么O命名

大佬们帮忙举例(增删该查)以上这些情况入参和出参命名规范,各层大部分情况字段可能一样,啥情况下字段可能会不一样。

大佬们解惑下,如果是一个对象干到底,我不就白问了,嘻嘻

共有3个答案

王建华
2024-02-20

一般情况下,就用到dto,vo,entity,dto是接收参数,vo是后端给前端返回参数,entity是实体类和数据库表的属性一样

张子墨
2024-02-20

我整理了一个关于这些内容的表格,供大家参考。

不过要注意,这个表格并非严格遵循的规范,实际开发中应根据具体需求参考,而不是盲目应用。

比如在我自己的这个脚手架项目中,我也没有严格遵守表格中列出的所有概念,而是根据实际需求使用了一些。

  • https://www.mjga.cc
  • https://github.com/ccmjga/mjga-scaffold

一般来说大多数时候,我使用Entity、DTO和视图模型(VM)。当我的项目变得越来越大时,我会引入领域对象和值对象(VO)。

后缀 定义 用处 备注 三层架构
DTO 数据传输对象。通常只包含属性和 getter/setter 方法,没有任何业务逻辑。 用于在应用程序的不同层之间传输数据 不可变。 service controller dao
VM 视图模型。通常用不可变对象的如 record 来表示。 映射视图中的数据,实现视图和模型之间的解耦。 不可变 controller
Entity 实体对象。通常包含实体的属性和行为,但不包含复杂的业务逻辑 表示业务领域中的实体或对象,例如用户、订单、商品等。属于领域模型中的一部分。通常由数据访问层创建和管理。 有独立的生命周期 dao
Vo 值对象。一种不可变的对象,它的值在创建后不会发生变化。不包含业务逻辑和复杂的计算。 一个独立的类,不直接依赖于业务逻辑或数据访问层;通常由领域模型或服务层创建和管理,用于表示一些简单的值。 没有独立的生命周期。 需要定义 equals 方法。 service
DO(Domain Object) 领域模型。通常持有多个类成员如实体、值对象等构成领域业务的成员,并包含实现业务逻辑的复杂方法。 用于表示特定领域的业务概念和规则,封装应用程序的业务逻辑和行为。 有独立的生命周期。其持有的值对象的生命周期依赖于领域模型的生命周期。 service
名称 定义 用处
Bean 遵循一些特定的规则。必须有一个无参的构造函数,并且属性必须使用 getter 和 setter 方法进行访问。 适合用于在不同的层之间传递数据,或者封装和业务无关的功能如 Spring 容器管理的对象等。
Pojo 普通的 Java 对象,没有任何限制。 适用于各种场合,特别是和业务相关的场合,如映射数据库实体等。
南宫喜
2024-02-20

如果个人开发,小项目,感觉别搞这么复杂,直接一个 po 搞定,我现在最多也就分podtovo,搞太多人都晕了

我按我理解说一下:

po 的使用:
这个是数据库一个表对应一个类 UserUserInfo

public class User {    private long userId;    private String password;    private String username;    private String phone;    private String email;    private int sex;    }public class UserInfo {    private long userId;    private Date birthday;    private String job;    private String about;    }



dto 的使用: controller 层接收用

// 比如登录public class LoginUserDTO {    private String password;    private String username;    }// 比如添加用户public class AddUserDTO {    private String password;    private String confirmPassword;    private String username;    private String phone;    private String email;    private int sex;        private UserInfoDTO userInfo;}public class UserInfoDTO {    private Date birthday;    private String job;    private String about;    }



vo 的使用: controller 返回给前端用

public class UserVO {    private Long userId;    private String username;    private String phone; // 一般会加密    private String email; // 一般会加密    private Integer sex;        private UserInfoVO userInfo;    }public class UserInfoVO {    private Date birthday;    private String job;    private String about;    }

1.创建、更新,各层入参使用什么O命名(controller -> service -> dao)
添加用户过程:controller 层接收 AddUserDTOservice 层把 AddUserDTO 转成 UserUserInfodao 入库。

2.ID查询和分页查询,各层出参数使用什么O命名(dao -> service -> controller)
获取用户过程:dao 获取 UserUserInfo,给 service 层转成 UserVO,或者 controller 层转成 UserVO

 类似资料:
  • Java常见对象 DO、BO、DTO、VO、AO、PO总结,​DO( Data Object) 与数据库表结构一一对应,通过DAO层向上传输数据源对象。PO(Persistant Object) 持久对象 用于表示数据库中的一条记录映射成的 java 对象。

  • 本文向大家介绍基于java中的PO VO DAO BO POJO(详解),包括了基于java中的PO VO DAO BO POJO(详解)的使用技巧和注意事项,需要的朋友参考一下 一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的ava对象。 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合PO中应该不包含任何对数据库的操作。 二、VO

  • 问题内容: DTO,VO,POJO,JavaBeans之间的区别? 问题答案: JavaBeans JavaBean是遵循Sun定义的JavaBeans约定的类。Wikipedia很好地总结了什么是JavaBean: JavaBean是Java的可重用软件组件,可以在构建器工具中直观地对其进行操作。实际上,它们是用Java编程语言编写的,符合特定约定的类。它们用于将许多对象封装到单个对象(bean

  • springboot多模块项目中,vo,dto应该放在那一层比较合适? 如题,假设项目有如下包 demo-web demo-service demo-dao demo-common vo,dto应该放在那一层比较合适? dao层放mapper和DO(也就是和数据库表对应的类) 是毋庸置疑的。 VO我的理解是返回给前端页面的对象,按理说应该放在web模块比较合适,但是有时候我们可以在dao层直接写个

  • 我的要求是,为了应用程序审计的目的,我希望比较两个BO对象,并返回一个obj diff作为Json字符串将详细信息存储到审计表中。在我的例子中,我实现了一个hibernate拦截器,它将监视BO操作。这部分工作得很好。但是当试图将BO对象与Javers进行比较时,会出现一个名为 下面是我的示例hibernate结果类 注意:BO对象在运行时可以包含值。

  • 假设我有一个对象,该对象应包含(政府 ID)对象。我正在从乘客获取。创建对服务器的请求并获取数据(json),而不是解析接收的数据并存储在存储库中。 我很困惑,因为我想将< code>Passport存储为实体,并将其放入< code>PassportRepository中,但所有关于密码的信息都包含在json中,而不是我在上面收到的信息。 我想我应该使用作为 VO 并将其放入(聚合)对象中。或者