进一步认识DTO

DTO数据传输对象详解 文章目录一、DTO是什么?二、DTO解决的问题三、代码演示 一、DTO是什么? DTO (数据传输对象) 数据传输对象(DTO),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。 简单了说:假设你数据库中定义了User类,包含用户名、密码、邮箱、手机号等等;当用户登录时一般只需要输入用户名和密码,那么传入服务端的用户名和密码就可以在contr 阅读详情

我是个Web前端出身,一直执着于View层的各种炫,Control的折腾也是为了迎合View,很少关心Model层的细枝末节,设甚至连J2EE里的各种Object都分不太清。

顿时想起了写这个的宗旨,所以,每一个很小很细枝末节的死角都值得淡定地坐下来,花十几分钟半个小时好好梳理一下。

DTO(Data Transfer Object:数据传输对象)模式,又称VO模式,是指将数据封装成普通的javaBeans, 在J2EE多个层次之间传输。

DTO类似信使,是同步系统中的Message的,该JavaBeans可以使一个数据模型,常见的方式是实体对象建立一个Model类,该类只包含这个对象所有字段的getter和setter。

例如用户user实体有name、password字段,则建立一个UserModel类,

publicclassUserModel {

   private String name;

   private String password;

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   public String getPassword() {

      returnpassword;

   }

   publicvoid setPassword(Stringpassword) {

      this.password = password;

   }

}

这样就可以把UserForm作为参数传递给其他函数。

Data Transfer Object(DTO)模式是为了解决这样的问题:

一个实体Bean,对应的数据库表的字段很多,我们在Home接口的create方法中以及Enterprise Bean类的ejbCreate方法中的参数可能就会很多,导致我们的这些方法不够elegant。

这时候,可以先定义一个简单的类,实现Serializable接口,定义一些属性,并提供相应的get和set方法来解决上面的问题。

这里我就不提供代码了,可以再举一个更具体的例子。
比如一张表有100个字段,那么对应的PO就有100个属性。但是界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO了!

小结一下Model、Domain object以及DTO关系:

1.   分析提炼Model是系统设计之起端

2.   系统设计之初,三者基本统一

3.   系统复杂化后,DTO可能是多个Model组合实现

 

 


Springboot 为了偷懒,我封装了一个自适配的数据单位转换工具类 自定义注解,自适配封装单位转换函数 阅读详情

相关推荐

Rust练手:从零手撸RISC-V架构虚拟机(一)(附完整代码)

使用Rust实现一个简单的RISC-V架构的CPU雏形,支持add,sub,addi三个指令。

qq_45983373的博客 2570

浅谈POJO:VO、DTO、DO、PO

近期看到有人在讨论VO、DIO、DO、PO,大家各抒己见,诚然,网上各种文章不同说法导致大家先入为主,其实我认为这些说法没有对错之分,我们能达成概念一致性就可以了;POJO本身就是伴随着编程模型(比如MVC、MVP等)而延伸出来的概念,本意就是让我们开发团队之间能有一个标准的数据规范,无论是把VO命名为Value Object还是View Object,它们本身概念都还是视图对象,用于展示层。 个人书写习惯以及概念 VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)

weixin_48292094的博客 2663

发那科机器人弧焊指令实战:从Search指令到组掩码设置的完整避坑指南

本文详细解析了发那科机器人弧焊指令系统的实战应用,从Search指令的正确使用到组掩码设置的避坑技巧。通过实际案例和参数优化建议,帮助工程师提升焊接质量和生产效率,避免常见错误操作。特别针对T2模式示教难题和外部轴协调运动提供了专业解决方案。

weixin_29040367的博客 185

java jersey dto对象_jersey json post没有dto

下面的代码起作用@POST@Path("/{apiId}")@Consumes(MediaType.APPLICATION_JSON)public Response postMetricsData(String metricsData) {System.out.println(metricsData);return Response.ok().build();}以下代码正在引发错误@POST@Pa...

weixin_42526484的博客 242

实验记录 | 如何拆分scATAC-seq数据成为单个细胞?(1、解决barcode问题)

在师兄的帮助下,我得到了师兄筛选过的细胞的barcode的数据,那么接下来我想根据这些barcode,将来源于同一个barcode的细胞的reads提取出来,这个还是一个蛮有技术含量的事情的,因为上次我有使用过perl的脚本进行提取,最后的实验结果很糟糕,故而这件事情一直搁置到现在,没有继续去做(我的脚本的编写能力还是有待于加强,可能是刚刚喝了奶茶,和老妈弟弟聊了好多闲话,很开心,觉得在某种程度上休息够了,对于工作也是一种非常快乐和积极的状态了)。 0。前期失败尝试回顾 ...

weixin_40640700的博客 1887

硬件-电源-智能保护:eFuse选型与实战设计全攻略

本文深入解析eFuse在硬件电源设计中的关键作用与实战选型技巧。作为智能保护器件,eFuse能提供毫安级精度的过流保护、多重故障防护和智能恢复功能,比传统保险丝快1000倍以上。文章详细介绍了eFuse的工作原理、五大选型维度和PCB布局要点,帮助工程师有效预防电源异常导致的硬件损坏,适用于AI服务器、工业控制等场景。

weixin_30879169的博客 200

java中VO、DTO、DO、BO 、POJO的区别

1、VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。 2、DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。 3、D...

qq_35137375的博客 8678

【中科院一区Top-源码复现】Day-ahead photovoltaic power forecastingwith multi-source temporal-featureconvoluti

【中科院一区Top-源码复现】Day-ahead photovoltaic power forecastingwith multi-source temporal-featureconvoluti

739

DTO构造的几种方式

DTO构造的几种方式: 1 构造函数 public class TestDTO { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age

wendy_fly的专栏 4526

【Python】秋招机考 —— 2025/9/17 华为 AI 方向

秋招机考,华为 AI,使用 Python 完成编程。

一杯水果茶!足矣~ 1166

AUTOSAR进阶图解==>AUTOSAR_SWS_CANStateManager

AUTOSAR CAN状态管理器(CanSM)摘要 CanSM是AUTOSAR通信栈中的关键模块,负责管理CAN网络状态和模式转换。主要功能包括: 控制CAN控制器/收发器工作模式(STARTED/STOPPED,NORMAL/STANDBY) 处理三种网络状态(全通信、静默通信、无通信)之间的转换 监控和处理总线关闭(Bus-Off)事件 与ComM、CanIf、BswM等模块协同工作 CanSM通过状态机管理网络状态转换,支持可配置的总线关闭恢复策略。它为每个CAN网络维护独立的状态机,实现网络状态的精

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 5579

采用DTO和DAO对JDBC程序进行进一步优化

采用DTO和DAO对JDBC程序进行进一步优化 DTO:数据传输对象,主要用于远程调用等需要远程调用对象的地方DAO:数据访问对象,主要实现封装数据库的访问,通过它可以把数据库中的表转换成DTO类 引入DTO其实就是新建实体类。 那么DAO呢,就是封装访问数据的方法,比如对某一个表插入,更新,删除等方法可以放进对应的dao中 代码如下: 这是访问User表所使用方法的接口,里面...

209

3分钟学会SQL中的断点去重技术,轻松搞定连续重复数据去重问题?

传感器采集的温度数据中,存在连续重复的值,需仅在数值变化时保留记录(例如:温度从 25°C 变为 26°C 时记录一次)。:判断逻辑,current_value!若当前温度与前一行的温度不同(或为第一条记录),则保留该行。的技术,常用于时间序列或状态日志中。:将连续相同值的记录合并,只保留断点处的记录。保留断点处的记录(即温度变化时的第一条)。原始数据表 sensor_data。最终仅保留值变化的断点记录。获取前一行的温度值。

石榴姐yyds 1019

SpringBoot-复杂DTO接收参数

后端接收复杂JSON数据 举例:(前端传入对象:包含数组、对象、对象列表) { "sysName": "FSSC", "dataId": "22f5df09810150ea", "dataVersion": "", "returnUrl": "http://fsscdev.sce-re.com/", "navigateUrl": "http://fsscdev.sce-re.com/", "loginName": "xucc", "sysArgs":

qk 7923

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POJO/VO/DTO等对象模型

JavaBean   要想成为JavaBean,需要满足以下条件:   1,提供一个默认的无参构造函数。   2,需要被序列化并且实现了Serializable接口。   3,可能有一系列可读写属性伴随"getter"或"setter"方法。 POJO   POJO(Plain Ordinary Java Object)简单的Java对象,而不是一个特殊的对象。   1,非...

weixin_30348519的博客 79

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

DTO,VO,ENTITY

三种实体类。

qq_41927287的博客 150

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

前端formData传参,后端Dto对象接收

前端formData传参,后端Dto对象接收

Kally_tao的专栏 2509

swagger 修改dto注解_Swagger介绍及使用

Swagger介绍及使用导语:相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。其实无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过...

weixin_36247564的博客 839

Struts2 DomainModel、ModelDriven接收参数

一、DomainModel(域模型) 1、 应用场景:一般我们在struts2的action中接收参数通常是如下方式 package cn.orlion.user; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ pr...

weixin_33885676的博客 161

maptruct复制对像

现在项目中要求用mapstruct 每个接口要有自己的接收参数对象,就是controller层的入参对象,以Req结尾,比如:IndicatorReq 规定service层不能直接用IndicatorReq,要转换为IndicatorDTO service返回结果也是DTO结尾,比如IndicatorResultDTO 在controller层返回不能直接用IndicatorResultD...

weixin_41126842的博客 339

[Forward]Selected Design Patterns - Data Transfer Object

Data transfer objects are also known as value objects (VOs) and are used for data exchanges between various application components, which can be either colocated in the same process or on remote com...

hehailin19860604的专栏 175

你见过哪些目瞪口呆的 Java 代码技巧?

当实际工作中,完成了几个 API 的 DTO 转化时,我们会发现,这样的操作有很多很多,那么应该定义好一个接口,让所有这样的操作都有规则的进行。如果接口被定义以后,那么 convertFor 这个方法的语义将产生变化,它将是一个实现类。虽然这个接口很简单,但是这里告诉我们一个事情,要去使用泛型,如果你是一个优秀的 Java 程序员,请为你想做的抽象接口,做好泛型吧。

2301_77463738的博客 763

PO,BO, VO, DTO, POJO, DAO的概念及区分

O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。   VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成。从结构...

小董同学 336

java中的vo 、dto 、dao(转自yinchunjian)

O ,POJO,   O/R Mapping 是 Object Relational Mapping (对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在 O/R Mapping 的世界里,有两个基本的也是重要的东东需要了解,即 VO , PO 。 VO ,值对象 (Value Object) , PO ,持久对象 (Persisent Object) ,它们是由一组属性和属性的 get 和 set 方法组成。从结构上看,它们并没有什么不同的地方。但从其意义和本质上

jiji0801的专栏 218

5-Dapper(与 EF Core 共存)

✅ DTO 分层规范(Common/Input/Output) ✅ 通用分页模型全局复用 ✅ 实体与 DTO 手动映射工具类统一管理 ✅ 所有接口完成 DTO 改造,隔离数据库实体 ✅ 参数校验、字段长度约束统一配置。

wlq_567的博客 205

fastjson判空_springboot中用fastjson处理返回值为null的属性值

我们先来看代码:@Configurationpublic class WebMvcConfig extends WebMvcConfigurationSupport {public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {FastJsonHttpMessageConverter fastJsonHttpMessage...

weixin_42513209的博客 748
上一篇: J2EE中各种对象让人眼花缭乱的专业缩略词
下一篇: java 23种常用设计模式之外观模式(Facade)
freedom1993
博客等级 码龄12年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值