java 实现深度拷深度转换Bean<->Bean

JSON与Java Bean互转技术详解 Java Bean需遵循以下命名规范:类名应使用大驼峰命名法(如UserInfo属性名应使用小驼峰命名法(如userName属性应为私有(private),通过Getter/Setter方法访问;必须包含一个无参构造函数(默认构造函数);类应实现接口以支持序列化。public User() {} // 默认构造函数// Getter和Setter逻辑分析:User类实现接口,便于持久化或网络传输; 阅读详情
<!--dozer-->
        <dependency>
            <groupId>com.github.dozermapper</groupId>
            <artifactId>dozer-core</artifactId>
            <version>6.2.0</version>
        </dependency>
 /**
     * 持有Dozer单例, 避免重复创建DozerMapper消耗资源.
     */
    private static Mapper MAPPER = DozerBeanMapperBuilder.buildDefault();

    /**
     * 基于Dozer转换对象的类型.
     */
    public static <T> T map(Object source, Class<T> destinationClass) {
        if (source == null) {
            return null;
        }
        return MAPPER.map(source, destinationClass);
    }

    /**
     * 基于Dozer转换Collection中对象的类型.
     */
    public static <T> List<T> mapList(Collection sourceList, Class<T> destinationClass) {
        List<T> destinationList = new ArrayList<>();
        for (Object sourceObject : sourceList) {
            destinationList.add(MAPPER.map(sourceObject, destinationClass));
        }
        return destinationList;
    }

    /**
     * 基于Dozer将对象A的值拷贝到对象B中.
     */
    public static void map(Object source, Object destination) {
        MAPPER.map(source, destination);
    }


    /**
     * @param sourceBean *            被提取的对象bean
     * @param targetBean *            用于合并的对象bean
     * @return targetBean 合并后的对象
     * @Title: merge
     * @Description: (因为在使用map方法时遇到有字段没有复制成功 , 所以重写了新方法 , 经试用没问题 。)该方法是用于相同对象不同属性值的合并,如果两个相同对象中同一属性都有值,
     * 那么sourceBean中的值会覆盖tagetBean重点的值
     * @return: Object
     */
    @SuppressWarnings("unused")
    public static Object mergeObject(Object sourceBean, Object targetBean) {
        Class sourceBeanClass = sourceBean.getClass();
        Class targetBeanClass = targetBean.getClass();

        Field[] sourceFields = sourceBeanClass.getDeclaredFields();
        Field[] targetFields = sourceBeanClass.getDeclaredFields();
        for (int i = 0; i < sourceFields.length; i++) {
            Field sourceField = sourceFields[i];
            Field targetField = targetFields[i];
            sourceField.setAccessible(true);
            targetField.setAccessible(true);
            try {
                if (!(sourceField.get(sourceBean) == null) && StringUtils.isNotBlank(sourceField.get(sourceBean).toString())) {
                    targetField.set(targetBean, sourceField.get(sourceBean));
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return targetBean;
    }

DozerBeanMapper映射工具 dozer是一种JavaBean的映射工具,类似于apache的BeanUtils。但是dozer更强大,它可以灵活的处理复杂类型之间的映射。不但可以进行简单的属性映射、复杂的类型映射、双向映射、递归映射等,并且可以通过XML配置文件进行灵活的配置。 立即下载

相关推荐

org.dozer JAR 包(实现java bean mapper)

dozer是一款优秀的java bean映射开源框架,完成深度转换Bean<->Bean的Mapper实现

DozerMapper工具类

Web 开发的时候,我们往往需要构建 VO 进行返回数据给前端,那么如何给 VO 赋值呢?如果是一个对象的话,我们可以使用 SpringBoot 提供的 BeanUtils.copyProperties(source, target) 这种方式,但是如果我们需要给一个数组或者是 List 进行批量赋值的话,BeanUtils 是不能满足的,这种情况下可以使用 DozerBeanMapper 进行属性拷贝。

TaylorSwiftRed的博客 1810

80MHz~100MHz频谱分析仪设计

由理论分析可知,经过乘法器后输出的信号为频率为w1+w2的高频信号和w1-w2的低频信号,除了想要采样的直流信号外,最小的信号频率为100kHz。因此,经过一系列推导可以得到该滤波器的元件C1,C2,C3,R1,R2的近似值分别为:C1=2.36nF,C2=32.1nF,C3=1.07nF,R1=1.39k,R2=2.84k。AK,此时的频率w2即为被测信号的频率,待测信号源电压幅度为,因此为了能达到直流采样的设计,我们将本振源的频率输出范围做成80~110 MHz,提高了题目的频率要求。

qq_48771816的博客 5242

Dozer BeanMapper 对象转换

dozer是什么? 在开发过程中,常常会涉及到对象之间的转换,bean到dto到vo等等,dozer便是很好的一个对象转换的组件。它可以将一个对象递归拷贝到另外一个对象。既支持简单的对象映射,也支持复杂的对象映射。 对象映射 dozer支持两种映射方式,调用api的简单映射方式和使用xml的映射方式。api调用的方式约束我们定义的两个bean中的成员变量名要一样,方便自动映射,至于类型可以不一样,...

简单随风的博客 805

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

【项目实战】Qt6 录制屏幕、录制声音生成MP4、AVI、MA3等(完整源码,可直接编译使用)

本文将详细介绍如何利用Qt6多媒体模块中的QMediaCaptureSession、QMediaRecorder、QScreenCapture、QAudioInput、QMediaFormat等功能,实现对屏幕和声音的录制,并生成常见的媒体格式文件,如MP4、AVI、MA3等。我们将探讨如何利用这些功能来实现灵活的视频和音频参数设置,以满足不同需求下的录制和生成要求。我们将重点讨论如何配置视频和音频参数,包括分辨率、帧率、编解码器选择、音频采样率、声道设置等。

yegu001的博客 4939

使用 Dozer 进行对象的映射

Dozer简介 Dozer 是 Java Bean 到 Java Bean 的映射器,他以递归的方式将数据从一个对象复制到另一个对象。Dozer 支持简单属性映射、双向映射、隐式映射以及递归映射。使用该映射器可以很方便的在项目中进行 pojo、do、vo 之间的转换。 快速入门 现有两个 Java Bean 类: public class User { private Strin...

黄晓宇的博客 4234

2021.11.23 Covins 多机器人单目协同建图 跑Euroc数据集 更新

近日,一直在调试如何使用Covins跑通数据集,因为是初学者,所以很多bug出来的时候原理都不懂,只能复制——百度——尝试解决的过程。 现分享一下近日的结果以及与Covins作者帮助解答的一些问题。 使用代码行跑依次跑Euroc多数据集 这里的意思是使用作者提供的covins_examples文件夹中的euroc_examples_mh123_vigba.sh文件,这个文件是将三个Euroc数据集依次运行,跑完第一个数据集,第二个数据集运行的时候在第一个数据集生成地图的基础上继续绘制,由于我只下载了两个数据

qq_42614598的博客 2474

Java常见bean mapper的性能及原理分析

来源:http://r6d.cn/VxXn背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换、赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,...

Java知音 2560

射频总集篇:(不断更新)

射频每一章涉及到的重点理论/设计方法 CHAPTER 1 传输线理论 输入阻抗Zin,负载阻抗ZL,驻波比ρ,反射系数 CHAPTER 2 波导 矩形波导,圆波导,同轴线 CHAPTER 3 微型带状传输线 微带线的参数设计,带状线的参数设计 CHAPTER 4 ...

jieyannn的博客 1919

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6811

SpringBoot - 使用DozerBeanMapper进行深度拷贝

前言 Dozer是一个Java Bean的转换组件,它可以将一个对象递归拷贝到另外一个对象,支持简单属性映射,复杂类型映射,双向映射,隐式显式映射以及递归映射。 具体应用 依赖 <!-- dozermapper --> <dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <

Maggieq8324的博客 3259

蛋白组学/磷酸化蛋白组学分析笔记-2

如何校正蛋白丰度?磷酸化组学质谱下机处理。

weixin_43029125的博客 1371

简单封装Dozer, 实现深度转换Bean到Bean的Mapper.实现:

import java.util.Collection; import java.util.List;import org.dozer.DozerBeanMapper;import com.google.common.collect.Lists;/** * 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.实现: * * 1. 持有Mapper的单例. *

guanfengliang的专栏 5957

索尼IMX316 标定_ToF模块相机校准

很多东西一开始给出去的并不是最优的方案,而是在客户端支持中,以及在持续不断的芯片验证中,发现还可以这么做,还能够再提升Sensor的性能,所以说这是一个持续的过程。曾经听说过一个故事,在某厂里ST产品一直作为第一供应商多年,然后近段时间即将被新兴公司的ToF产品所打败,性能报告已经出来,但是ST并没有更新产品,而是在原有产品更新了固件以及标定流程,此时产品的性能又是超越其他供应商的产品。相机矩阵不考虑镜头失真,因为理想的针孔相机没有镜头。为了准确地代表一个真实的相机,相机模型包括径向和切向的镜头畸变。

dream it possible 1153

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

简单封装Dozer, 实现深度转换Bean -- Bean的Mapper

** * 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.实现: * * 1. 持有Mapper的单例. * 2. 返回值类型转换. * 3. 批量转换Collection中的所有对象. * 4. 区分创建新的B对象与将对象A值复制到已存在的B对象两种函数. * */ public class BeanMapper { /** * ...

你看你细细看 466

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Bean属性转换框架深度对比:从BeanUtils到MapStruct的演进之路

小李:小王,今天学到了很多!BeanUtils:简单易用,适合快速原型开发和简单场景Dozer:功能强大,支持复杂映射和深度嵌套,适合复杂业务场景MapStruct:性能最优,类型安全,适合高性能要求的新项目小王:总结得很准确!每个框架都有其适用场景,关键是要根据实际需求做出合理的技术选型。框架性能功能复杂度学习成本维护成本适用场景BeanUtils低低低低简单转换,快速原型Dozer中高高高复杂映射,深度嵌套MapStruct高中中中高性能,类型安全。

工一木子 772

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java PO BO DTO VO bean对象互相转换高性能实现工具

方案一:MapStruct Github 官网 MapStruct使用教程 方案二:Dozer Github 官网 Dozer使用教程 Dozer 工具类 import java.util.Collection; import java.util.List; import org.dozer.DozerBeanMapper; import com.google.common.collect.Lists; /** * 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.

zhaoyang10的专栏 4170

Dozer实现Bean的深度转换

import org.dozer.DozerBeanMapper; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.实现: * * 1. 持有Mapper的单例. * 2. 返回值类型转换. * 3. 批量转换Collection中的所有对象. * 4. 区分创建新的B对象与将对象A.

lizx1018的博客 255

Java Bean对象互相转换

Java Bean对象互相转换。

蒯厅博客 854

【Bean拷贝】深度解析:原理、方案与最佳实践

你是否在分层开发中频繁编写重复的 get/set 代码?当项目中充斥着 DTO、VO、PO 等多种数据模型时,手动拷贝属性不仅耗时费力,还容易因疏忽导致字段遗漏或类型错误。Bean 拷贝技术正是为解决这一痛点而生——它通过自动化工具实现不同对象间的属性复制,大幅减少重复编码,提升开发效率与代码质量。

2301_81073317的博客 6835

12种Bean转换

来源:再见 BeanUtils!性能真拉跨! 一、前言 二、性能测试对比 三、12种转换案例 1. get\set 2. json2Json 3. Apache copyProperties 4. Spring copyProperties 5. Bean Mapping 6. Bean Mapping ASM 7. BeanCopier 8. Orika

小强快跑~~ 1423

Java Bean所有拷贝方式使用详解及性能比较

本文系统对比了Java中9种对象属性拷贝方式的优缺点及适用场景:1. 手动拷贝灵活但冗余;2. Apache/Spring BeanUtils简单但性能低;3. CGLIB BeanCopier高性能但功能有限;4. MapStruct支持复杂映射且性能最佳;5. Dozer/ModelMapper适合深拷贝;6. Lombok构造方法简洁;7. JSON序列化支持深拷贝但性能差。

onlymscn的博客 1366

基于字节码技术的bean转换工具框架

实现一种字节码生成技术的多模式Bean转换通用工具。支持任意原始类型互转、任意包装类型互转、自定义嵌套实体类型的深拷贝或者映射互转等情况。对于复杂场景,比如N层数组类、N层Map类、N层Collection 类、N层Collection转N维数组或者以上类型的相互嵌套情况均可适配兼容,优于现有开源框架。映射转换效率方面,不同场景略有差异,总体而言性能极佳,接近手动get/set方式 。此外,自研工具框用户接口设计简洁,使用方便,运行稳定。自研工具框架支持动态生成转换类,满足各类动态转换需求。...

wenyiking的博客 1675

Map和Bean的相互转换

Map和Bean的相互转换BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下:完整方法:BeanUtils.populate( Object bean, Map properties ),这个方法会遍历map<key, value>中的key,如果bean中有这个属性,就把这个key对应的valu...

weixin_30902675的博客 189

CopyUtil(java复合bean的copy)

诞生由来 之前项目里就经常有bean之间的属性copy,一直都是用spring自带的工具类来解决,方法如下: org.springframework.beans.BeanUtils#copyProperties(java.lang.Object, java.lang.Object); 该方法只能对一个bean中普通属性字段进行copy,如果这个bean中有其他的bean,即bean中bean,就...

qq_37276508的博客 3752
上一篇: java读取文件、配置文件
下一篇: java多线程工具类,多线程实现
狂野弘仁
博客等级 码龄8年 34粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值