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";