在 Java 系统工程开发过程中,都会有各个层之间的对象转换,比如 VO、DTO、PO、VO 等,而如果都是手动又太浪费时间,还可能操作错误,所以选择一个自动化工具会更加方便;同时在工作也常常遇到将java的Bean对象转化为Map,或者将Map转为Bean对象的情况。中文telegram 的版下载地址
目前用于对象属性转换有12种,包括普通的get/set、json2Json、Apache属性拷贝、Spring属性拷贝、bean-mapping、bean-mapping-asm、BeanCopier、Orika、Dozer、ModelMapper、JMapper、MapStruct
Spring 提供的 是大家代码里最常出现的工具类,注意不是 包下手动性能是最好的,另外 性能和操作也很方便,因为它本身就是在编译期生成代码,和我们写一样其他一些组件包主要基于 、、,的技术手段实现的,所以也会有相应的性能损耗
工作常常遇到将java的Bean对象转化为Map,或者将Map转为Bean对象,常见手段有以下几种
通过json工具,将Bean转json,再将json转Map(效率低)jdk的反射,获取类的属性,进行转化(比较麻烦,书写代码比较多)通过工具类来完成(效率高,底层也是基于反射,不过做了些优化,比如缓存等手段 ,推荐)通过来完成(bean转化map是Map<String, String>类型)
这种方式也是日常使用的最多的,性能十分优秀,但是操作起来有点麻烦。多个get/set可以通过 Shift+Alt 选中所有属性,Shift+Tab 归并到一列,接下来在使用 Alt 选中这一列,批量操作粘贴 以及快捷键大写属性首字母,最后切换到结尾补充括号和分号,最终格式化一下就可以了
把对象转JSON串,再把JSON转另外一个对象,这种方式性能不是很高
这个方法是反射的属性拷贝,Spring 提供的 copyProperties 要比 Apache telegram中文版是多少好用的多,性能和操作都比较好,这个包是
另外这里考虑到属性不同的字段的拷贝,还额外创建了一个回调函数进行映射处理
中文telegram 版的下载的地方在哪里
这里的回调函数可以使用Enum枚举进行规范化,最终进行测试,成功拷贝
另一种方法进行转换,常用
Cglib BeanCopier 的原理与Beanutils 原理不 telegram的下载网址在哪里太一样,其主要使用 字节码技术动态生成一个代理类,代理类实现get 和 set方法。生成代理类过程存在一定开销,但是一旦生成,我们可以缓存起来重复使用,所有 Cglib 性能相比Beanutils 性能比较好整体性能不错,使用也不复杂
如果要自定义转换,可以使用,一旦我们自己打开使用转换器,所有属性复制都需要我们自己来了,否则会导致无法复制。另外这里需要注意的是拷贝对象要去除注解,因为该注解会将 方法的返回值由 修改为当前对象。这导致 的方法签名改变,最终导致 无法识别现有的 方法
官网文档地址:https://github.com/mapstruct/mapstruct
MapStruct是一款基于Java注解的对象属性映射工具,在Github上已经有4.5K+Star。使用的时候我们只要在接口中定义好对象属性映射规则,它就能自动生成映射实现类,不使用反射,性能优秀,能实现各种复杂映射。(强烈推荐)
首先导入Maven依赖
创建Bean对象
编写Mapper文件,实现同名同类型属性、不同名称属性、不同类型属性的映射
最后直接通过接口中的实例调用转换方法
其实MapStruct的实现原理很简单,就是根据我们在Mapper接口中使用的和等注解,在运行时生成接口的实现类,我们可以打开项目的目录查看
初次之外,MapStruct使用有:
基本映射、集合映射、子对象映射、合并映射使用依赖注入、使用常量/默认值/表达式、映射前后自定义、处理映射异常等官网telegram 的最新的下载的网址
详情可参考:
https://blog.csdn.net/zhenghongcs/article/details/121349361
https://mapstruct.org/documentation/stable/reference/html/
这种操作是利用telegram 官方网站下载的地址在哪里 java 原生提供的反射特性来实现互转
BeanMap是org.springframework.cglib.beans.BeanMap,在springcore中中文的telegram的地址怎么找
首先导入依赖
工具类
注意反射方法进行的时候一定要有无参构造,否则会报错找不到该方法
参考文章
https://mp.weixin.qq.com/s/_QJa5RSxvPBsqXo8yS5-pg
https://blog.csdn.net/u011622109/article/details/106910538
https://blog.csdn.net/scholar_man/article/details/115917932