spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)

它的出现原因: BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

我有一个Category分类表对象,和一个ProductInfo商品表对象

我需要的数据格式是(以分类作为基数,分类下面有多条帖子):

data:[
{
"cid":1,
"name":"灌水",
"theads":[
{
"id":1,
"cid":1,
"name":"有喜欢这歌的吗?"
"time":"2018-12-12 18:25"
},
{
"id":1,
"cid":1,
"name":"有喜欢这歌的吗?"
"time":"2018-12-12 18:25"
}
]
} ,{
"cid":2,
"name":"文学",
"theads":[
{
"id":18,
"cid":2,
"name":"徐志摩的诗"
"time":"2018-12-12 18:25"
},
{
"id":21,
"cid":2,
"name":"鲁迅的散文"
"time":"2018-12-12 18:25"
}
]
}
]

  

代码如下

 ResultVO resultVO = new ResultVO();
//ProductVO productVO = new ProductVO();
//List<ProductInfoVO> productInfoVOList = new ArrayList<ProductInfoVO>();
//productVO.setProductInfoVOList(productInfoVOList);
//resultVO.setData(productVO);
//查询商品
List<ProductInfo> productInfoList = product.findAll(); //查询商品类目(一次性读完)
//传统方法
// List<Integer> categoryTypeList = new ArrayList<>();
//for (ProductInfo productInfo: productInfoList)
// {
// categoryTypeList.add(productInfo.getCategoryType());
//}
//java8-lambda方法
List<Integer> categoryTypeList = productInfoList.stream().map(e -> e.getCategoryType()).collect(Collectors.toList());
List<ProductCategory> CategoryList = category.findByCategoryTypeIn(categoryTypeList); //拼合数据
for (ProductCategory category: CategoryList)
{
//productCategory
ProductVO productVO = new ProductVO();
productVO.setCategoryType(category.getCategoryType());
productVO.setCategoryName(category.getCategoryName()); //productInfo
List<ProductInfoVO> productInfoVOList = new ArrayList<>();
for (ProductInfo productInfo : productInfoList)
{
if(productInfo.getCategoryType().equals(category.getCategoryType()))
{
//老方法:
ProductInfoVO productInfoVO = new ProductInfoVO();
productInfoVO.setProductId(productInfo.getProductId());
productInfoVO.setProductName(productInfo.getProductName());
productInfoVOList.add(productInfoVO); //新方法:将productInfo属性复制到productInfoVO1中
//beanutils.copyproperties
ProductInfoVO productInfoVO1 = new ProductInfoVO();
BeanUtils.copyProperties(productInfo, productInfoVO1);
productInfoVOList.add(productInfoVO1);
}
}
productVO.setProductInfoVOList(productInfoVOList);
} return resultVO;
//return "list";

  

spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)的更多相关文章

  1. spring BeanUtils.copyProperties只拷贝不为null的属性

    在MVC的开发模式中经常需要将model与pojo的数据绑定,apache和spring的工具包中都有BeanUtils,使用其中的copyProperties方法可以非常方便的进行这些工作,但在实际 ...

  2. 将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法

    获得对象的所有属性名 || 将对象o的所有属性名放到数组中 var o = {x:1,y:2,z:3}; var arr = []; var i = 0; for(arr[i++] in o){};/ ...

  3. LOB对象在数据泵导出、导入后查询对象数量发现丢失

    问题描述:问题:源库的某个Schema使用数据泵Expdp元数据整体导出,在目标库导入且成功后,逻辑验证用户对象,发现缺失.分析查询后,缺失的对象,都是LOB类型(并不是所有的LOB都无法导入,是大部 ...

  4. python将对象写入文件,以及从文件中读取对象

    原文地址: http://www.voidcn.com/article/p-fqtqpwxp-wo.html 写入文件代码: >>> import sys, shelve >& ...

  5. js 对象数组根据某个名称删除数组中的对象

    delArrayItem: function (array,item) { const index = array.findIndex(text => text.name === item.na ...

  6. Spring、Commons的BeanUtils.copyProperties用法

    如果两个对象A.B的大部分属性的名字都一样,此时想将A的属性值复制给B,一个一个属性GET\SET代码量太大,可以通过复制属性的方式减小工作量,同时代码看起来更加简洁明了,复制属性可以用Spring或 ...

  7. C# for循环或者foreach往List中添加对象的时候前面的数据总被最后加入的覆盖

    昨天我旁边小姐姐遇到一个问题,就是在执行for循环往list添加数据的时候,前面的数据信息总是被后面的数据信息所覆盖.  这样编写就会造成这样的数据效果:(所有的数据都会被覆盖)     问题原因:对 ...

  8. java多线程与线程并发五:多个线程访问共享对象和数据的方式

    本节的内容主要是对前面几节提到的线程间共享数据的方式做一个总结. 线程之间共享数据有以下几种方式: 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象. 2.如果每个线程执行的代码不同 ...

  9. C++中的对象的赋值和复制

    对象的赋值 如果对一个类定义了两个或多个对象,则这些同类的对象之间可以互相赋值,或者说,一个对象的值可以赋给另一个同类的对象.这里所指的对象的值是指对象中所有数据成员的值. 对象之间的赋值也是通过赋值 ...

随机推荐

  1. 集合框架-Set集合

    代码: Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add(" ...

  2. vector at()函数比 []运算符操作安全

    转载:https://blog.csdn.net/chenjiayi_yun/article/details/18507659 []操作符的源码 reference operator[](size_t ...

  3. topcoder srm 525 div1

    problem1 link 最后剩下的是中间的一个矩形.所以可以直接枚举这个矩形,如果它含有的硬币个数等于$K$,则再计算移动的最少次数,更新答案. problem2 link 首先,每个节点发送每种 ...

  4. [翻译]使用VH和VW实现真正的流体排版

    前言 不像响应式布局,通过media query,设置几个变化点来适配,流体排版通过调整大小,适配所有设备宽度.这个方法可以使我们开发的网页,在几乎所有屏幕尺寸上都可以使用.但出于一些原因,它的使用率 ...

  5. Restful framework【第六篇】认证组件

    基本用法 -认证功能 1 写一个类,继承BaseAuthentication 2 def authenticate(self,request) ,记住传request对象 -如果验证通过,返回None ...

  6. git使用操作

    git config --system --unset credential.helper 重置git

  7. CodeChef - MRO Method Resolution Order(打表)

    题意:有一种关系叫继承,那么继承父类的同时也会继承他的一个函数f,能继承任意多个父类或不继承,但不能继承自己的子类.现在规定一个列表,这个列表必须以1~N的顺序排列,并且父类不会排在子类后面,1含有一 ...

  8. FJUT3591 侦测到在途的聚变打击(最小不可相交路径覆盖)题解

    题意:给你n个点,点间m条路,给出在每条路要走的时间.现在有q个任务,要摧毁q个点,每次提供ci和ti表示在时间ti摧毁点ci(必须正好在时间ti才能摧毁),每个点可能需要多次摧毁(同一时间能在同一个 ...

  9. Many Website Of WallPaper

    我在这里给大家推荐几个不错的壁纸网站 毕竟一张赏心悦目的壁纸能让你的工作效率提高不少 注意前方高能 一大波网站即将来袭 一系列 如你所见 alphacoders wallpaperdj Wallhav ...

  10. p3396 哈希冲突(暴力)

    想了好久,没想到优秀的解法,结果是个暴力大吃一静.jpg 分类讨论,预处理\(p\le \sqrt{n}\) 的情况,其他直接暴力,复杂度\(O(n \sqrt{n} )\) #include < ...