首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

轻松高效玩转DTO(Data Transfer Object)

Dozer 将确保数据库中的内部域对象不会流入外部表示层或外部使用者。...StudentVo: [StudentVo(id=null, name=null, age=null, mobile=null, addr=中国)] 用例 3 默认我们要使用 Dozer 的隐式匹配(同名字段全部匹配...),但我们不想将学生的 mobile 字段做映射,我们可以通过 exclude 方法排除不想映射的字段修改 configure //测试所有properties,为不同名的 property 手动配置映射关系...Field 级别的 date-format,按照优先级最高的进行格式化:Field > 类 > 全局 用例 8 我们可以为 mapping 设置 mapId, 在转换的时候指定 mapId,mapId...可以设置在类级别,也可以设置在 field 级别,实现一次定义,多处使用,同时也可以设置转换方向从默认的双向变为单向(one way): mapping(StudentDomain.class, StudentVo.class

2.3K20

带你见个新朋友,轻松掌握DTO(Data Transfer Object)

Dozer 将确保数据库中的内部域对象不会流入外部表示层或外部使用者。...StudentVo: [StudentVo(id=null, name=null, age=null, mobile=null, addr=中国)] 用例 3 默认我们要使用 Dozer 的隐式匹配(同名字段全部匹配...),但我们不想将学生的 mobile 字段做映射,我们可以通过 exclude 方法排除不想映射的字段修改 configure //测试所有properties,为不同名的 property 手动配置映射关系...Field 级别的 date-format,按照优先级最高的进行格式化:Field > 类 > 全局 用例 8 我们可以为 mapping 设置 mapId, 在转换的时候指定 mapId,mapId...可以设置在类级别,也可以设置在 field 级别,实现一次定义,多处使用,同时也可以设置转换方向从默认的双向变为单向(one way): mapping(StudentDomain.class, StudentVo.class

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

    重学Springboot系列之整合数据库开发框架---中

    重学Springboot系列之整合数据库开发框架---中 java bean的赋值转换 为什么要做java bean赋值转换 BeanUtils和Dozer?...可以简单的认为一个PO对应数据库中一张表中的一个记录。PO对象里面只有基本数据类型和String类型的属性(如:int、String),与数据库字段是一一对应的。...如果你的业务,可以用一个实体类对象,就可以贯穿持久层到展现层,就没有必要做映射赋值转换,也没有必要去分VO、BO、PO。比如:单表表格数据展现、修改、新增。...这种我们该如何实现呢? 或者需要createDate 转 cDate这种属性名称都不一样的,怎么做。 比如下面的两个测试model,进行属性自动赋值转换映射。...> 第二种:通过注解 @Results 和 @Result 这两个注解是与XML文件中的标签相对应的: @Results对应resultMap @Result对应result 这两个注解是应用在方法的级别上的

    1.7K10

    5种常见Bean映射工具的性能比对

    幸运的是,Java 有多个对象映射框架。在本教程中,我们将比较最流行的 Java 映射框架的性能。...sourceCode) { return (DestinationCode) simpleMapper.getDestination(sourceCode); } } 我们还需要向目标类的每个字段添加...简单的模型测试 对于性能测试,我们可以使用 Java Microbenchmark Harness,关于如何使用它的更多信息可以在 这篇文章:https://www.baeldung.com/java-microbenchmark-harness...结论 根据我们在本节中执行的真实模型测试,我们可以看出,最佳性能显然属于 MapStruct。在相同的测试中,我们看到 Dozer 始终位于结果表的底部。 7....总结 在这篇文章中,我们已经进行了五个流行的 Java Bean 映射框架性能测试:ModelMapper , MapStruct , Orika ,Dozer, JMapper。

    3.7K50

    实体拷贝工具大汇总,你还在用BeanUtils? 赶紧来学一学吧

    使用spring中的BeanUtils 说下这个BeanUtils,要注意的是,他的类名和上面说的那个类名是一模一样的,区别就是一个是apache的,一个是spring的, spring的这个只要你的项目中有...同理他里边的BeanCopier在拷贝类的时候也是通过字节码的方式实现的,所以效率很高。不夸张的说,这个类应该是众多实体拷贝的方式中综合成绩最高的,我参考的很多其他文章也都是这个类的效率第一。...所以如果对于效率要求比较高的情况下,建议选择这个类,同时要注意,这个类在使用的时候有一个初始化的过程,我们可以把初始化的对象缓存起来,网上有比较多的案例,大家可以参考,去掉初始化的时间,我用这个类拷贝的结果是...上面几种工具都是做的浅拷贝,相当于你的类中如果还嵌套了其他对象是拷贝不了的。而dozer是支持深拷贝的,并且支持不同字段名名字的映射。...这也是一个实体拷贝类框架,需要引入依赖, 支持自定义映射, 支持List, Map拷贝,用法和dozer极为相似,在我的测试中效果表现很好,很快。比较推荐。

    83930

    打开orika的正确方式

    Dozer 使用以上类库虽然可以不用手动编写 get/set方法,但是他们都不能对不同名称的对象属性进行映射。...BeanUtils具有相同的地位,负责对象间的映射,也是实际使用中,我们使用的最多的类。...集合可以自动映射吗?这一切Orika都帮助我们完成了,在默认行为下,只要类的字段名相同,Orika便会尽自己最大的努力帮助我们映射。...映射字段名不一致的对象 我对于DTO的理解是:DTO应当尽可能与DO的字段保持一致,不增不减不改,但可能出于一些特殊原因,需要映射两个名称不同的字段,Orika当然也支持这样常见的需求。...集合映射 在类中我们之前已经见识过了List 与List的映射。

    3.8K110

    帮助 Java 开发人员进行 Bean 映射的 8 大框架

    对于以下有关推荐框架的部分,我将提供框架的概述说明,然后编写代码段供您在准备好时开始使用。...,其中实例化模型是真实实例的创建或抽象的特定实现,例如对象类。...私有字符串类型; //构造函数、getter、setter等 } 这两个类几乎相同,只是座位数的属性具有不同的名称,并且 Car 类中的枚举类型属性是 DTO 中的纯字符串。...它生成 Java 代码来处理字段到字段的映射,还可以作为运行时库来调用生成的映射器。...如果您想避免在将数据从一个 bean 复制到另一个 bean 时使用不必要的代码,Dozer 是理想的选择。它不仅支持 bean 的映射,还可以自动转换数据类型以映射类与 DTO。

    2.3K10

    无惧性能烦恼-12款Bean拷贝工具压测大比拼

    # 背景 在开发过程中,我们通常会用到DO、DTO、VO、PO等对象,一般来说这些对象之间的字段具有一定的相似性。...、基于反射 Apache BeanUtils: 基于反射 Orkia: 基于javassist类库生成Bean映射的字节码 Dozer: 基于反射、定制化属性映射、XML映射 # 实验设置 本次实验只针对各工具类最核心接口...实际上在日常开发过程中,开发者对于经常使用的工具类也会选择用static final修饰,或采用诸如Map等进行实例缓存。...; 复杂类型对象DbDO、DbVo、MockOne、MockTwo,复杂类型对象中包含108个字段,且字段中存在MockOne、MockTwo对象,在MockOne中包含其自身的嵌套子集List对于复杂对象的拷贝尤其考验拷贝工具类的性能,毕竟在拷贝场景中,我们不仅仅只有简单的对象。更有嵌套、多字段、多类型等复杂情况。

    3.2K41

    无惧性能烦恼-12款Bean拷贝工具压测大比拼

    # 背景在开发过程中,我们通常会用到DO、DTO、VO、PO等对象,一般来说这些对象之间的字段具有一定的相似性。...、基于反射Apache BeanUtils: 基于反射Orkia: 基于javassist类库生成Bean映射的字节码Dozer: 基于反射、定制化属性映射、XML映射# 实验设置本次实验只针对各工具类最核心接口...实际上在日常开发过程中,开发者对于经常使用的工具类也会选择用static final修饰,或采用诸如Map等进行实例缓存。...;复杂类型对象DbDO、DbVo、MockOne、MockTwo,复杂类型对象中包含108个字段,且字段中存在MockOne、MockTwo对象,在MockOne中包含其自身的嵌套子集List的BeanUtil,在本轮测试结果中同样也存在效率低下的问题。复杂对象不同于简单对象测试,对于复杂对象的拷贝尤其考验拷贝工具类的性能,毕竟在拷贝场景中,我们不仅仅只有简单的对象。

    2.5K30

    Java对象拷贝_对象的拷贝有几种方法

    Mapstruct: MapStruct是一个Java 注释处理器,用于为Java Bean类生成类型安全和高性能的映射器。它使您不必手工编写映射代码,这是一个繁琐且容易出错的任务。...) github mapstruct/mapstruct 4、BeanCopier:BeanCopier是Cglib包中的一个类,用于对象的复制。...浅拷贝与深拷贝差异 分类 浅拷贝 深拷贝 区别 创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象...); /** * 类型转换的映射 * * @param userDO UserDO数据持久层类 * @return 数据传输类 */..., userName=Van, gmtBroth=null, balance=null) 复制代码 分析 通过打印日志的前后对比,属性类型不同的字段id,gmtBroth,balance未拷贝。

    4.9K10

    Dozer数据对象转换神器

    在一个分层的体系结构中,经常会使用DTO、PO、VO等封装数据,封装数据到特定的数据对象中,然而在很多情况下,某层内部的数据是不允许传递到其它层,不允许对外暴露的,特别是在分布式的系统中,内部服务的数据对外暴露...其次,为什么要使用Dozer? 前期对于很多程序员来说,数据转换都是通过手工编写转换工具类或工具方法来实现的,这样不仅没有针对性而且工作量很大,编写工具类重用性差,而且不灵活。...所以,急需要使用一个通用的映射工具,通过配置或少量的编码就可以轻松的实现数据对象之间的转换,Dozer就是这样的映射工具,它具有通用性,灵活性,可重用性和可配置等特点,并且是开源的。...dozerBeanMapping.xml中配置了class-a和class-b分别用于配置两个要互相转换的类(需要加包名),field标签用于配置两个类的属性,a代表class-a类的属性,b代表class-b...类的属性,与中是属性名称,只要配置好a和b之后,dozer会将a的值转换给b,Dozer支持的转换类型如下: Primitive to Primitive Wrapper Primitive

    1.1K40

    Java 中 bean mapper 的性能分析以及深入分析底层原理

    背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换、赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils、BeanCopier、Dozer、Orika...Dozer就提供了这些功能,有支持同名隐式映射,支持基本类型互相转换,支持显示指定映射关系,支持exclude字段,支持递归匹配映射,支持深度匹配,支持Date to String的date-formate...方法,而在没有自定义converter的情况下会调用mapOrRecurseObject方法 大多数情况下字段的映射会在这个方法做一般的解析 private Object mapOrRecurseObject...类就两个方法mapAtoB和mapBtoA,从名字看猜到前者是负责src -> dest的映射,后者是负责dest -> src的映射。...,现在就看在调用MapperFacade的map方法是如何使用这个mapper类的。

    1.6K20

    BeanUtils、BeanCopier、Dozer、Orika 哪个性能最强?

    背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换、赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils、BeanCopier、Dozer、...Dozer就提供了这些功能,有支持同名隐式映射,支持基本类型互相转换,支持显示指定映射关系,支持exclude字段,支持递归匹配映射,支持深度匹配,支持Date to String的date-formate...false, fieldMap.getMapId()); } return result; } 小结 Dozer功能强大,但底层还是用反射那套,所以在性能测试中它的表现一般...类就两个方法mapAtoB和mapBtoA,从名字看猜到前者是负责src -> dest的映射,后者是负责dest -> src的映射。...,现在就看在调用MapperFacade的map方法是如何使用这个mapper类的。

    2.9K31

    关于领域模型转换的那些事儿

    的BeanUtils中拷贝方法的原理都是先用jdk中 java.beans.Introspector类的getBeanInfo()方法获取对象的属性信息及属性get/set方法,接着使用反射(Method...使用以上类库虽然可以不用手动编写get/set方法,但是他们都不能对不同名称的对象属性进行映射。在定制化的属性映射方面做得比较好的就是Dozer了。...Dozer支持简单属性映射、复杂类型映射、双向映射、隐式映射以及递归映射。可使用xml或者注解进行映射的配置,支持自动类型转换,使用方便。...框架: 基于JSR269的Java注解处理器,通过注解配置映射关系,在编译时自动生成接口实现类。...第九种,Orika框架: 支持在代码中注册字段映射,通过javassist类库生成Bean映射的字节码,之后直接加载执行生成的字节码文件。

    1.1K10

    Java对象属性复制组件-Mapstruct的项目改造指南

    嵌套对象字段,将会与源对象使用同一对象,即使用浅拷贝。 字段名不一致,属性无法复制。 类型不一致的字段,将会进行默认类型转化。 4. Dozer 运用反射。...5. orika 底层其使用了javassist生成字段属性的映射的字节码,然后直接动态加载执行字节码文件,相比于使用反射的工具类,速度上会快很多。 支持深拷贝。...通过配置字段名的映射关系,不一样字段的属性也被复制。...如何引入MapStruct 只需要引入MapStruct的依赖,同时由于MapStruct需要在编译器期间生成代码,所以我们需要maven-compiler-plugin插件中配置。...但在上面一步升级lombok的过程中,lombok对于@Builder的实现出现了一些修改:在1.16.22的生成代码中,是存在private级别的无参构造函数;而在1.18.12的生成代码中,并没有私有无参构造函数

    2.9K41

    别再用BeanUtils转换对象啦!这个框架更快更强大!!

    它是一个使用字节码技术栈实现的高性能 Java 对象映射框架,在众多映射框架中是简单易用又高效的代表之作! 下面由小妹带大家去感受一下它的魅力吧!...优势 性能 对比其他很多工具使用反射方式实现的映射,Orika 它是直接动态加载 Javasist 类库生成对象映射的字节码进行字段映射,这种方式比传统的反射赋值,速度上会快很多。...灵活 支持两个对象的字段名不同的映射关系,也支持同一个字段名不同数据类型的转换,甚至于支持嵌套对象的字段映射,完全能够满足你不同的转换需求! 快速入门 1....对比 我还尝试了几款常见的对象映射框架,比如 Spring 的 BeanUtils, Dozer 和 MapStruct 等。...Dozer 有良好的定制化属性映射功能,支持简单属性、复杂类型的映射和递归映射等功能。但是同样使用了反射技术进行赋值,效率非常不能让人满意。

    54240

    Hibernate注解之基本注解的注解使用

    类级别注解 @Entity : 映射实体类,其中有一个name属性指定当前实体类映射的表的名称 name: 可选属性 ,指定对应表的名称,如果没有指定name属性,那么创建表的名称和类名一样 @...name - 可选,表示数据库表中该字段的名称,默认情形属性名称一致 nullable -可选,表示该字段是否允许为 null,默认为true unique - 可选,表示该字段是否是唯一标识,...对于一经创建就不可以更改的字段,该 属性非常有用,如对于 birthday字段。 columnDefinition - 可选,表示该字段在数据库中的实际类型。...此外 ,String 的默认映射类型为VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB或 TEXT字段类型,该属性非常有用。...unique 生成唯一的约束,就是这个字段的值唯一,默认的false @JoinTabl 当涉及到多对多的映射关系的时候,用来定义第三表的表名,和字段的名称。

    2K10
    领券