java中将一个实体类复制到另一个实体类的3种方法示例
前言
这两天在做发票识别时,遇到一个问题,有一张发票表(假设为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实体类复制到另一个实体类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringCloud @RefreshScope刷新机制深入探究
RefeshScope这个注解想必大家都用过,在微服务配置中心的场景下经常出现,他可以用来刷新Bean中的属性配置,那大家对他的实现原理了解吗?它为什么可以做到动态刷新呢2023-03-03Spring事件监听器ApplicationListener源码详解
这篇文章主要介绍了Spring事件监听器ApplicationListener源码详解,ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,需要的朋友可以参考下2023-05-05JAVA基础 语句标签的合法使用,以及{}语句块到底有什么用?
以前的一个思维误区,for(){},if(){}之类的用法中,逻辑if()和语句块{}应该是相互独立的两种语法2012-08-08centos7如何通过systemctl启动springboot服务代替java -jar方式启动
这篇文章主要介绍了centos7如何通过systemctl启动springboot服务代替java -jar方式启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2024-01-01
最新评论