j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维。

POJO(plain old java object):普通的java对象,有别于特殊的java对象(含继承约束等)和EJB。POJO一般只有一系列的属性和相应的get、set方法。

PO(persistant object):持久化对象,有别于POJO,必须对应数据库中的实体。一个PO对应数据库的一条记录。持久化对象的生命周期与数据库密切相关,只能存在于connection之中,连接关闭后,PO就消失了。

PO相对于POJO有诸多不同,比如PO中会有保存数据库entity状态的属性和方法。但是ORM(object-relation mapping)追求的目标是PO和POJO的一致,所以在程序员的日常开发中,都是将POJO作为PO使用,而将POJO转化为PO的功能交给hibernate等框架来实现。

DTO(data transfer object):数据传输对象,以前被称为值对象(VO,value object),作用仅在于在应用程序的各个子系统间传输数据,在表现层展示。与POJO对应一个数据库实体不同,DTO并不对应一个实体,可能仅存储实体的部分属性或加入符合传输需求的其他的属性。

DAO(data access object):数据访问对象。提供访问数据库的抽象接口,或者持久化机制,而不暴露数据库的内部详细信息。DAO提供从程序调用到持久层的匹配。

BO(business object):业务对象。主要是将业务逻辑封装为一个对象,该对象可以包含一个或多个其他对象。如,"Principal"(委托人),有"Name","Age"等属性,同时和"Employee"(雇员)有1对多的关系,这个"Principal"就可以作为一个与业务相关的PO。

实践小结

按照标准来说:

1、entity里的每一个字段,与数据库相对应,

2、VO里的每一个字段,是和你前台页面相对应,

3、DTO,这是用来转换从entity到dto,或者从dto到entity的中间的东西。

举个例子:

你的html页面上有三个字段,name,pass,age

你的数据库表里,有两个字段,name,pass(注意没有age哦)而你的dto里,就应该有下面三个(因为对应html页面上三个字段嘛)

private string name;

private string pass;

private string age;

这个时候,你的entity里,就应该有两个(因为对应数据库表中的2个字段嘛)

private string name;

private string pass;

到了这里,好了,业务经理让你做这样一个业务“年龄大于20的才能存入数据库”

这个时候,你就要用到vo了

你要先从页面上拿到VO,然后判断dto中的age是不是大于20,如果大于20,就把dto中的

name和pass拿出来,放到vo中,然后在把DTO中的name和pass原封不懂的给entity,然后根据

entity的值,在传入数据库,这就是他们三个的区别

PS,DTO和entity里面的字段应该是一样的,DTO只是entity到VO,或者VO到entity的中间过程,如果没有这个过程,你仍然可以做到增删改查。

java dto是什么_java项目中VO和DTO以及Entity,各自是在什么情况下应用的相关推荐

  1. java日志怎么实现_JAVA项目中怎么实现一个通用日志记录功能

    JAVA项目中怎么实现一个通用日志记录功能 发布时间:2020-11-21 17:04:50 来源:亿速云 阅读:53 作者:Leah 今天就跟大家聊聊有关JAVA项目中怎么实现一个通用日志记录功能, ...

  2. java reds 集群_java项目中配置redis-cluster集群的两种方式

    本文分两部分: (1)jedisCluster (2)Spring-Data-Redis集群配置和RedisTemplate用法 我这里是在本机上搭建的3主3从6个redis实例. 一,jedisCl ...

  3. 1分钟看懂:java 项目中 VO 、DTO、Entity,各自是在什么情况下应用的

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.entity 里的每一个字段,与数据库相对应, 2.vo 里的每一个字段,是和你前台 html ...

  4. java redis缓存理解_Java项目中使用Redis缓存案例

    缓存的目的是为了提高系统的性能,缓存中的数据主要有两种: 1.热点数据.我们将经常访问到的数据放在缓存中,降低数据库I/O,同时因为缓存的数据的高速查询,加快整个系统的响应速度,也在一定程度上提高并发 ...

  5. java文件运行错误_java项目中运行错误

    展开全部 Java异常概念 1)Java异常是32313133353236313431303231363533e59b9ee7ad9431333363373666Java提供的用于处理程序错误的一种机 ...

  6. java 抽象类与接口区别是什么_JAVA中抽象类与接口的区别,分别在什么情况下使用它们...

    在网上看到很多人问关于"抽象类与接口的区别",因此本人想通过自己多年对JAVA开发的经验来总结一下抽象类与接口的区别以及分别在什么情况下使用它们. 在Java语言中, abstra ...

  7. java批量处理数据库语句_Java项目中调用bat批处理进行多用户数据库备份

    Java项目中调用bat批处理配合使用BCP进行多用户数据的备份 一.项目需求 最近项目中需要对数据库(Sql Server系列数据库)进行备份.项目中的需求不是简单的整个数据库的备份,而是根据用户来 ...

  8. java jndi使用_Java项目中使用JNDI连接数据库

    因为写的大作业经常用到数据库连接 所以自己写了个数据库连接的类 package DB_Link_info;/* * 数据库链接信息 */public class DB_link_Info {publi ...

  9. java通信项目_Java项目中的多线程通信如何利用Socket实现

    Java项目中的多线程通信如何利用Socket实现 发布时间:2020-11-24 16:44:40 来源:亿速云 阅读:96 作者:Leah 这期内容当中小编将会给大家带来有关Java项目中的多线程 ...

最新文章

  1. IOS-React-Native:unable to find utility instruments, not a developer tool or in PATH
  2. Java 随心笔记10
  3. android触摸消息的派发过程
  4. 未获取root手机抓包方法
  5. 如何解决90%的问题?10位阿里大牛公布方法
  6. SpringBoot—整合log4j2入门和log4j2.xml配置详解
  7. Q1:spring-boot中Controller路径无法被访问的问题
  8. 八十第五个冠军(复制和匹配的字符串)
  9. Oracle触发器5-Instead of触发器
  10. 新加入一个团队,我们应该怎么做?
  11. 查询Mysql的数据架构信息研究
  12. Springboot项目中Pom.xml报错
  13. linux c 进程池 简单实现
  14. Java速成系列-03-Java的下载
  15. 高端物理学名词_物理名词大全
  16. 【ArcGIS风暴】气象台站气温(降水)矢量数据插值成栅格气温(降水)空间数据
  17. shell 脚本中双引号、单引号、反引号的区别
  18. Router Support for Fine-Grained Latency Measurements阅读笔记
  19. 什么是HTTP代理?
  20. IMDB评分排名算法

热门文章

  1. 并不是所有的程序员都适合做技术管理
  2. LeetCode.917-只反转字母(Reverse Only Letters)
  3. vmware虚拟机移植带来的问题
  4. 在Java中定义常量
  5. 用SparseArray代替HashMap
  6. 黄聪:C#编写的Word操作类,有换页,添加表格,文本功能
  7. linux下openssl编程
  8. 真正的编程高手-----激励计算机专业的大学生
  9. java web日期_java-web——第十一课 时间类
  10. linux mysql卸载_Linux环境搭建