展开

关键词

浅入 ABP 系(7):对象映射

(Domain Driven Design)中的概念,实体通常一一映射某些对象的固有属性,最常使用的是关系数据库中的。 在 ABP 中,DTO 位于应用服务层,即本系文章示例源码中的 AbpBase.Application 项目。 通常示层或其它类的客户端调用应用服务时,将 DTO 作为参数传递,它使用领域对象(实体)执行某些特定的业务逻辑,并将 DTO (跟传入的 DTO 不是同一个)返回到示层中,因此示层与领域层完全隔离 IObjectMapper 有两个,一个是 AutoMapper 的接口,一个是 Volo.Abp.ObjectMapping 的 接口。 但是因为 ObjectMapper 是类,每种类DTO 都要注入一次的话,会很麻烦,因此这种方案也可以抛弃。

19010

第五章:使用QueryDSL与SpringDataJPA实现查询返回自定义对象

下面我们需要创建两张来完成本章的内容。创建结构跟上一章一样,我们还是使用商品信息、商品类来完成编码。 bean方法第一个参数需要传递一个实体的作为返回集合内的单个对象类,如果QueryDSL查询实体内的字段与DTO实体的字段名字不一样时,我们就可以采用as方法来处理,为查询的结果集指定的字段添加别名 运行测试下面我们来运行下项目,访问地址:http:127.0.0.1:8080selectWithQueryDSL查看界面输出的效果如下代码块所示:我们可以看到输出的Json数组字符串就是我们DTO内的所有字段反序后的效果 ,但是从fetch()获取到结果集后我们处理的方式就有所改变了,fetch()方法返回的类List(List),List继承了Collection,完全存在使用Collection内非私有方法的权限 ,通过调用stream方法可以将集合转换成Stream对象,该对象的map方法可以操作集合内单个对象的转换,具体的转换代码可以根据业务逻辑进行编写。

1.9K40
  • 广告
    关闭

    2021云+社区年度盘点发布

    动动手指转发活动或推荐好文,即可参与虎年公仔等百份好礼抽奖!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    超简单使用redisson延迟队做定时任务

    * * @param queueName queueName * @param redisDelayedQueueListener 任务回调监听 * @param * @return * private * * @param t DTO传输类 * @param delay 时间数量 * @param timeUnit 时间单位 * @param * public void addQueue(T t 实体类的BODY,3秒之后执行); taskBody.setName(测试DTO实体类的姓名,3秒之后执行); 添加队3秒之后执行 redisDelayedQueue.addQueue(taskBody ()); taskBody.setBody(测试DTO实体类的BODY,20秒之后执行); taskBody.setName(测试DTO实体类的姓名,20秒之后执行); 添加队20秒之后执行 redisDelayedQueue.addQueue 对了,我这里是通过DTO的名字来区分队名的,所以每一个定时任务的DTO都不要相同。

    3K20

    打开orika的正确方式

    DTO的位置就系统的某一个模块,可以大致分成领域层model,接口定义层api,接口实现层服务层service,现层web。 ,只是想明:如果你有这样需求,Orika也能支持。 映射对的支持是Orika的另一强大功能,这点在文档中只是被提及,网上并没有找到任何一个例子,所以在此我想稍微着重的介绍一下。既然文档没有相关的介绍,那如何了解Orika是怎样支持映射的呢? ,那么,Orika如何解决映射呢? 我们可以发现MapperFacade的具有一系的重载方法,对各种类拷贝进行支持?

    2K110

    FreeSql v0.11 几个实用功能说明

    一、Dto 映射查询二、IncludeMany 联级加载三、Where(a => true) 逻辑达式解析优化四、SaveManyToMany 联级保存多对多集合属性五、迁移实体 - 到指定名六、MySql a => new Blog { Id = a.Id })这样写,只查询 id fsql.Select().ToList(a => new { a.Id })这样写,只查询 id,返回匿名对象映射支持单 商品,分类1、分类2、分类3 各10条数据定义临时类,也可以是 Dto 类class Dto { public int TypeId { get; set; } public List GoodsList 机制和 IUpdate.IgnoreColumns 一样UpdateColumns指定更新的,机制和 IUpdate.UpdateColumns 一样Set手工指定更新的,与 IUpdate.Set a => a.Id == TenantId.Value) .Apply(test2, a => a.Id == 111) .Apply(test3, a => a.Name == 11);Apply 参数可以设置为任何类

    49310

    DTO与值对象和POJO比较

    本文想澄清DTO与Value Object与POCO的区别,其中DTO数据传输对象,而POCO是Plain Old CLR Object,在Java环境中也称为POJO。 DTO,Value Object和POCO等概念经常互换使用。但他们真的是同义词吗? DTO是一个代一些没有逻辑的数据的类:DTO通常用于在单个应用程序中的不同应用程序或不同层之间传输数据。 从4.0版开始,Entity Framework引入了POCO数据模,该模允许使用不从EntityObject继承的类。也就是说,POCO代领域对象使用尽可能简单的类。 同时,POCO是一个更广的集合:它可以是值对象,实体,DTO或您可能创建的任何其他类,只要它不会遗漏您域中的意外复杂性。? 请注意,POCO可能都有自己的身份,也没有自己的身份。 它取决于它的POCO类:值对象或实体。此外,POCO可能包含也可能不包含逻辑。这取决于天气与否POCO是DTO。总结以下内容总结这个主题:1、DTO

    73020

    领域对象

    领域模中的实体类分为四种类:VO、DTO、DO、POVO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。 ,但在这里,我指用于展示层与服务层之间的数据传输对象。 PO(Persistent Object):持久化对象,它跟持久层(通常是关系数据库)的数据结构形成一一对应的映射关系,如果持久层是关系数据库,那么,数据中的每个字段(或若干个)就对应PO的一个( 领域模中的实体类领域模中的实体类分为四种类:VO、DTO、DO、PO,各种实体类用于不同业务层次间的交互,并会在层次内实现实体类之间的转化。相应各层间实体的传递如下图:? WechatIMG39.png●用户发出请求(可能是填写单),单的数据在展示层被匹配为VO。 ●展示层把VO转换为服务层对应方法所要求的DTO,传送给服务层。

    65010

    .NET高级特性-Emit(2)类的定义

    -C#类可以包含参数,此外,类还可以对实现约束  以上就是C#类所具备的一些元素,以下为样例:public abstract class Bar{ public abstract void PrintName 从上图我们可以很清晰的看到.NET的层级结构,位于树顶层浅蓝色圆点示一个程序集Assembly,第二层蓝色示模块Module,在模块下的均为我们所定义的类,类中包含类的参数、继承类信息、实现接口信息 (GenericParameterAttributes.NotNullableValueTypeConstraint);  (5) 继承和实现接口,注意当实现类的参数需传递给接口时,需要将接口添加参数后再调用 -当我们需要将实体映射到某个DTO时,可以用动态DTO来代替你手写的DTO,选择你需要的字段回传给前端,或者前端把他想要的字段传给后端  (2) DynamicLinq-我的第一篇博文有个读者提到了达式树 保持学习,勇于实践;Write Less,Do More;作者之后还会继续.NET高级特性系,感谢阅读!

    19520

    程序员天天敲的代码:两对象转换赋值「get到转换代码节省90%」

    背景java开发中一个对象的值赋值给另外一个对象,这样的例子太多,页面VO对象,需要转换为业务mode对象,系统中存在大量的VO、DTO、DO、PO,大量的转换代码需要程序员一行一行敲。 ,注意有少数属性类不一样sex和extInfo? 转换结果完美的转换了,DO就是我要存入数据库的对象?输出结果升级版案例跟上面代码完成一样的功能,但转换逻辑优化了。 加回调函数具体底层转换工具包,大家根据项目情况合理选择?我还是推荐spring的工具包?-------apache的工具包有些坑,不推荐使用?转换逻辑:前面代码一样我就省略,这里是回调函数加? 工具底层一般都是反射技术来实现的,如果对象复杂【比如DTO有继承关系】,可以自己写反射来实现。

    38930

    VO、DTO、DO、PO 我告诉你

    ,但在这里,我指用于展示层与服务层之间的数据传输对象。 PO(Persistent Object)持久化对象,它跟持久层(通常是关系数据库)的数据结构形成一一对应的映射关系,如果持久层是关系数据库,那么,数据中的每个字段(或若干个)就对应PO的一个(或若干个 导图下载请点击文章底左下角->阅读原文VO与DTO的区别DTO服务层需要接收的数据和返回的数据,而VO代展示层需要显示的数据。 如果这样的话,必然导致数据传输量的大增,对于分布式应用来说,由于涉及数据在网络上的传输、序化和反序化,这种设计更不可接受。 这里要特别声明,并不是所有多对多关系都没有业务含义,这跟具体业务场景有关,例如:两个PO之间的关系会影响具体业务,并且这种关系存在多种类,那么这种多对多关系也应该现为一个DO,又如:“角色”与“资源

    1.5K81

    一遍文章搞清楚VO、DTO、DO、PO的概念、区别

    ,但在这里,我指用于展示层与服务层之间的数据传输对象。 PO(Persistent Object):持久化对象,它跟持久层(通常是关系数据库)的数据结构形成一一对应的映射关系,如果持久层是关系数据库,那么,数据中的每个字段(或若干个)就对应PO的一个( 二、模下面以一个时序图建立简单模来描述上述对象在三层架构应用中的位置用户发出请求(可能是填写单),单的数据在展示层被匹配为VO。展示层把VO转换为服务层对应方法所要求的DTO,传送给服务层。 ,DTO服务层需要接收的数据和返回的数据,而VO代展示层需要显示的数据。 如果这样的话,必然导致数据传输量的大增,对于分布式应用来说,由于涉及数据在网络上的传输、序化和反序化,这种设计更不可接受。

    1.4K30

    javaList集合的两种赋值方式

    写在之前在开发中难免会有entity,vo,dto之间的转换那么如何优雅快速的进行转换呢?当然你可以get在set显然不推荐这样做! org.mapstruct.Mapperpublic interface AppCovert { AppCovert INSTANCE = Mappers.getMapper(AppCovert.class); ** * entity转dto * AppDTO entityTodto(App entity); ** * dto转entity * @param dto * @return * App dtoToEntity(AppDTO dto );}注:使用支持所有类的List转换 使用将entity转换为dtoMerchantDTO merchantDTO = MerchantDetailConvert.INSTANCE.entityTodto

    90220

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程三

    但是,它们也可以接受范围广的不需要的参数。您应该确保在将字符串传递给查询之前对其进行清理,以避免对查询进行不必要的更改。 如果支持值是null,则 getter 方法返回所用包装器类的空示。基于类的预测 (DTO)定义投影的另一种方法是使用值类 DTO(数据传输对象),这些 DTO 包含应该检索的字段的属性。 派生查询使用域类来映射结果,Spring Data 仅从域类上可用的属性创建 DTO 实例。不支持在 DTO 中声明域类上不可用的属性。 基于字符串的查询使用不同的方法,因为实际查询,特别是字段投影和结果类声明是紧密结合在一起的。与查询方法一起使用的 DTO 投影,将@Query映射查询结果直接注释为 DTO。 不考虑域类的字段映射。直接使用 DTO,您的查询方法可以从不限于域模的更动态的投影中受益。

    11830

    一次扫盲VO、DTO、DO和PO区别、用法、概念~

    ,但在这里,我指用于展示层与服务层之间的数据传输对象。 PO(Persistent Object):持久化对象,它跟持久层(通常是关系数据库)的数据结构形成一一对应的映射关系,如果持久层是关系数据库,那么,数据中的每个字段(或若干个)就对应PO的一个( 模:下面以一个时序图建立简单模来描述上述对象在三层架构应用中的位置用户发出请求(可能是填写单),单的数据在展示层被匹配为VO。展示层把VO转换为服务层对应方法所要求的DTO,传送给服务层。 ,DTO服务层需要接收的数据和返回的数据,而VO代展示层需要显示的数据。 如果这样的话,必然导致数据传输量的大增,对于分布式应用来说,由于涉及数据在网络上的传输、序化和反序化,这种设计更不可接受。

    1.5K30

    第一节 DDD领域驱动概述

    .在这里,指用于展示层与服务层之间的数据传输对象。 PO(Persistent Object):持久化对象,跟持久层(通常是关系数据库)的数据结构形成一一对应的映射关系,如果持久层是关系数据库,那么,数据中的每个字段(或若干个)就对应PO的一个(或若干个 2)在项目中的使用场景:以一个请求时序图建立简单模来描述上述对象在三层架构应用中出现叙述 用户发出请求(可能是填写单),单的数据在展示层被匹配为VO。 ,因为两者有着本质的区别,DTO服务层需要接收的数据和返回的数据,而VO代展示层需要显示的数据。 如果这样的话,必然导致数据传输量的大增,对于分布式应用来说,由于涉及数据在网络上的传输、序化和反序化,这种设计更不可接受。

    50230

    从产品展示页面谈谈Hybris系之二: DTO, Converter和Populator

    其中DAO的生成,也就是下图137行代码里的变量productModel的生成逻辑,会在下一篇文章即这个系的第三篇文章详细阐述。 第137行到139行明实际注入的populators属性是一个(List),这个List里的每一个元素是ProductPopulator。 这个resolve方法的使用,明了Populator不只是简单的把DAO对象的值设置到DTO对象中。 而在SAP Business by Design, SAP Hybris Cloud for Customer和SAP S4HANA里,这种DAO到DTO的映射关系则维护在一些模里。 维护映射关系的模则成为SADL模。如下图所示:?在这个系的下一篇文章里,Jonathan将介绍Hybris Commerce的持久层设计原理。

    26950

    ABP入门系(7)——分页实现

    展现层传入数据传输对象(DTO)调用一个应用服务方法,接着应用服务通过领域对象执行一些特定的业务逻辑并且返回DTO给展现层。这样展现层和领域层被完全分离开了。 因为分页是一个很常用的功能,所以,展现层我们有分页请求时,最好有相应的DTO来封装这两个参数。 在ABP源码中并没有为我们封装这样公用的类,但是在ABPZero项目中,定义了相应的分页Dto。 AbpZero把这些公共Dto定义在了应用服务层的Dto文件夹下,具体路径如下图。? AssignedPersonId { get; set; }}三、返回分页结果DTOAbp已经为我们定义了的PagedResultDto用来包装返回的分页结果。 五、使用X.PagedList进行前端分页在Asp.Net Mvc中进行前端分页有一系开源实现,在我的Demo中使用的是开源的X.PagedList分页。

    63950

    ABP入门系(13)——Redis缓存用起来

    引言创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉用来显示当前系统的所有用户,以供用户选择。我们每创建一个任务时都要去数据库取一次用户,然后绑定到用户下拉显示。 从图中可以看出主要包括四个部分:ICache->CacheBase->AbpMemoryCache:对缓存的抽象以及实现;ITypedCache:缓存的实现;ICacheManager->CacheManagerBase 那有没有版本?聪明如你,作者对ICache进行包装封装了个ITypedCache以实现类安全。 DTO的必要性:领域层的抽象数据隐藏序化和延迟加载问题那这个DTO跟要讲的实体缓存有什么关系呢? 它支持多种类的数据结构,如字符串(strings)、散(hashes)、(lists)、集合(sets)、有序集合(sorted sets)与范围查询、bitmaps、hyperloglogs和地理空间

    79490

    从产品展示页面谈谈Hybris系之二: DTO, Converter和Populator

    其中DAO的生成,也就是下图137行代码里的变量productModel的生成逻辑,会在下一篇文章即这个系的第三篇文章详细阐述。 而在其中的resourcecommercefacades-spring.xml文件中可以找到productConverter的定义: 第137行到139行明实际注入的populators属性是一个 这个resolve方法的使用,明了Populator不只是简单的把DAO对象的值设置到DTO对象中。 而在SAP Business by Design, SAP Hybris Cloud for Customer和SAP S4HANA里,这种DAO到DTO的映射关系则维护在一些模里。 维护映射关系的模则成为SADL模。如下图所示: 在这个系的下一篇文章里,Jonathan将介绍Hybris Commerce的持久层设计原理。

    59490

    DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架

    假设某个有50个字段,这样大的在很多复杂的系统中是很常见的,于是MAP出来的Entity或者DTO,也有50个属性,而我这次仅需要使用其中的2个属性的值,于是,这个对象上的 48个属性数据都浪费了。 如果这样的DTO对象用在List上且用于分布式环境,那么,这样浪费的网络IO和序化,凡序化浪费的CPU,还是比较严重的。 有人说,我们把DTO属性也定义为可空类,不就好了么? 但是,如果你的服务的客户端不是.net,而是JAVA,JS,或者其它不支持可空类的语言,这种有可空类属性的DTO就遇上麻烦了。 之类的工具,而在SOD框架内,使用了速度最快的属性拷贝方案,参见之前我写的博客文章: 《使用反射+缓存+委托,实现一个不同对象之间同名同类属性值的快速拷贝》另外,如果是从实体类到DTO,或者DTO到实体类的数据复制

    60290

    相关产品

    • 人工智能

      人工智能

      提供全球领先的人脸识别、文字识别、图像识别、语音技术、NLP、人工智能服务平台等多项人工智能技术。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券