中山网站建设半江红,沈阳免费网站建站模板,晋城企业网站建设,云主机上传wordpress文章目录 一、什么是Bean拷贝#xff1f;二、使用案例1、在pom文件中引入springframework(maven工程)2、准备两个bean对象3、方法使用单个对象拷贝集合拷贝 三、将BeanUtils进一步封装 一、什么是Bean拷贝#xff1f;
简单来讲#xff0c;就是 把一个bean对象中的字段拷贝到… 文章目录 一、什么是Bean拷贝二、使用案例1、在pom文件中引入springframework(maven工程)2、准备两个bean对象3、方法使用单个对象拷贝集合拷贝 三、将BeanUtils进一步封装 一、什么是Bean拷贝
简单来讲就是 把一个bean对象中的字段拷贝到另一个bean对象的字段 它在spring项目中常用来封装VO对象向前端传递数据。
例如当前A对象有6个字段而前端只需获取其中3个字段我们则需将此3个字段封装(VO)返回前端而不应将A中的6个字段(PO)返回前端。
但是我们每次都new 对象然后get/set 赋值会很繁琐代码复用性和效率不高因此我们可以使用apche提供的BeanUtils工具类
二、使用案例
1、在pom文件中引入springframework(maven工程)
2、准备两个bean对象
package com.mae.vuedemo.beanutils;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** Author: Mae* Date: 2022/2/7* Time: 21:44* Description:*/
Data
AllArgsConstructor
NoArgsConstructor
public class User {private Long id;private String name;private String password;private String email;private Integer sex;
}package com.mae.vuedemo.beanutils;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** Author: Mae* Date: 2022/2/7* Time: 21:45* Description:*/
Data
AllArgsConstructor
NoArgsConstructor
public class UserVo {private String name;private String email;
}3、方法使用
单个对象拷贝
copyProperties(Object source, Object target): 将source中的字段添加到target中 注意两对象中对应字段名和类型应完全相同否则无法拷贝
public class Demo {public static void main(String[] args) {User user getUser();UserVo userVo new UserVo();System.out.println(拷贝前:);System.out.println(userVo);BeanUtils.copyProperties(user, userVo);System.out.println(拷贝后);System.out.println(userVo);}private static User getUser() {User user new User(1L, Mae, 555555, 48488mae.com, 0);return user;}
}拷贝前
UserVo(namenull, emailnull)
拷贝后
UserVo(nameMae, email48488mae.com)集合拷贝
拷贝前
[]
拷贝后
[UserVo(nameMae, email48488mae.com), UserVo(nameNaomi, email48488mae.com), UserVo(nameMae2, email48488mae.com), UserVo(nameNaomi, email484dd88mae.com)]三、将BeanUtils进一步封装
实际项目中我们还需要对BeanUtils进一步封装因为Bean拷贝我们经常用到每次都像上面那样的话代码非常冗余且无法复用因此我们进一步封装BeanUtils使得每一个PO类都能够实现Bean拷贝(前提字段相同)
前提知识对 反射、泛型、stream流 应用 比较熟练
public class BeanCopyUtils {private BeanCopyUtils() {}
/** 1、单个对象*/public static V V copyBean(Object source, ClassV clazz) {/** 创建目标对象 实现属性拷贝*/V result null;try {result clazz.newInstance();/** 拷贝*/BeanUtils.copyProperties(source, result);} catch (Exception e) {e.printStackTrace();}return result;}/** 2、集合*/public static O, V ListV copyBeanList(ListO list, ClassV clazz) {/** 创建目标对象 实现属性拷贝*/return list.stream().map(o - copyBean(o, clazz)).collect(Collectors.toList());}
}User user getUser();UserVo userVo BeanCopyUtils.copyBean(user, UserVo.class);System.out.println(userVo);ListUser usersgetUserList();ListUserVo userVos BeanCopyUtils.copyBeanList(users, UserVo.class);System.out.println(userVos);UserVo(nameMae, email48488mae.com)
[UserVo(nameMae, email48488mae.com), UserVo(nameNaomi, email48488mae.com), UserVo(nameMae2, email48488mae.com), UserVo(nameNaomi, email484dd88mae.com)]