java中将一个实体类复制到另一个实体类的3种方法示例

 更新时间:2023年07月08日 09:29:09   作者:摇摆的含羞草  
这篇文章主要给大家介绍了关于java中将一个实体类复制到另一个实体类的3种方法,所谓实体类就是一个拥有Set和Get方法的类,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

这两天在做发票识别时,遇到一个问题,有一张发票表(假设为invoice_OCR_success)和一张我根据发票表新建的表(假设为invoice_OCR_fail),两张表有些字段名是相同的,有时需要把其中一张表的实例在另一张表里保存一份,此时就用到了实体类的复制,以下我将列出三种尝试的方法。

方式一:通过转换为JSONObject

InvoiceOCRSuccess kkjfInvoice1 = new InvoiceOCRSuccess();
JSONObject kkjfInvoiceOcrFail1 = JSONObject.parseObject(JSONObject.toJSONString(InvoiceOCRFail));
JSONObject kkjfInvoice2 = JSONObject.parseObject(JSONObject.toJSONString(kkjfInvoice1));
for (String key:kkjfInvoiceOcrFail1.keySet()){
    if (kkjfInvoice2.containsKey(key)){
        kkjfInvoice2.put(key,kkjfInvoiceOcrFail1.getString(key));
    }
}
InvoiceOCRSuccesskkjfInvoice3 = JSONObject.toJavaObject(kkjfInvoice2, InvoiceOCRSuccess.class);

此时kkjfInvoiceOcrFail1 中有数据,新建一个kkjfInvoice1 ,想将kkjfInvoiceOcrFail1 中重复的字段存入kkjfInvoice1 。但这个方法不会生效,因为这里new的对象是个空对象,它在转为JSONObject 时变为了空,for循环赋值那一步并没有赋值成功,大家根据实际情况改造一下就好了。

方式二:通过Map方式赋值

BeanMap beanMap = BeanMap.create(InvoiceOCRSuccess);
BeanMap beanMap1 = BeanMap.create(InvoiceOCRFail);
Map<String,Object> map = new HashMap<>();
for (Object key:beanMap.keySet()){
    String key1 = (String) key;
    if (beanMap1.containsKey(key)){
        map.put(key1,beanMap1.get(key));
    }
}
JSONObject jsonObject1 = new JSONObject();
jsonObject1.putAll(map);
InvoiceOCRSuccess kkjfInvoice2 = jsonObject1.toJavaObject(InvoiceOCRSuccess.class);

这个BeanMap是org.springframework.cglib.beans包下的类,用于将实例转为map形式。用这种方法是要注意,这个BeanMap中自带的put方法是不起作用的,具体原因有兴趣可以自行查阅,找到了可以让我也看看,new HashMap<>()的目的就是为了解决这个问题。

方式三:BeanUtils.copyProperties( @NotNull Object source,@NotNull Object target)

强烈推荐!!!

该方法是spring项目BeanUtils工具自带的方法,非常的好用。第一个参数是你的源数据,第二个参数是你要复制的目标对象,然后就复制成功了,nice!

总结

到此这篇关于java中将一个实体类复制到另一个实体类的3种方法的文章就介绍到这了,更多相关java实体类复制到另一个实体类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java NIO实战之聊天室功能详解

    Java NIO实战之聊天室功能详解

    这篇文章主要介绍了Java NIO实战之聊天室功能,结合实例形式详细分析了java NIO聊天室具体的服务端、客户端相关实现方法与操作注意事项,需要的朋友可以参考下
    2019-11-11
  • MyBatis批量插入几千条数据为何慎用foreach

    MyBatis批量插入几千条数据为何慎用foreach

    这篇文章主要介绍了MyBatis批量插入几千条数据为何慎用foreach问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java list.remove( )方法注意事项

    Java list.remove( )方法注意事项

    这篇文章主要介绍了Java list.remove( )方法注意事项,非常简单易懂,需要的朋友可以参考下
    2018-08-08
  • Java中scheduleAtFixedRate的用法

    Java中scheduleAtFixedRate的用法

    如何正确使用Java中的scheduleAtFixedRate是一篇介绍Java中定时任务调度器的文章。它详细介绍了scheduleAtFixedRate方法的用法、参数及作用,并给出了一些实例以帮助读者更好地理解其使用。本文为Java开发人员提供了一些实用的技巧,帮助他们更好地管理和控制定时任务
    2023-04-04
  • Springboot实现邮件发送功能

    Springboot实现邮件发送功能

    这篇文章主要为大家详细介绍了Springboot实现邮件发送功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Java实战练习之扑克牌魔术

    Java实战练习之扑克牌魔术

    这篇文章主要介绍了Java实战练习之扑克牌魔术,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-04-04
  • JAVA CountDownLatch与thread-join()的区别解析

    JAVA CountDownLatch与thread-join()的区别解析

    这篇文章主要介绍了JAVA CountDownLatch与thread-join()的区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 详解springSecurity之java配置篇

    详解springSecurity之java配置篇

    这篇文章主要介绍了详解springSecurity之java配置篇,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Spring Boot如何通过自定义注解实现日志打印详解

    Spring Boot如何通过自定义注解实现日志打印详解

    这篇文章主要给大家介绍了关于Spring Boot如何通过自定义注解实现日志打印的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • elasticsearch集群cluster主要功能详细分析

    elasticsearch集群cluster主要功能详细分析

    这篇文章主要为大家介绍了elasticsearch集群cluster主要功能详细分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04

最新评论