如何使用BeanUtils.copyProperties进行对象之间的属性赋值

 更新时间:2020年05月14日 10:51:13   作者:Terisadeng  
这篇文章主要介绍了使用BeanUtils.copyProperties进行对象之间的属性赋值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值

/**
  * 对象属性拷贝 <br>
  * 将源对象的属性拷贝到目标对象
  *
  * @param source 源对象
  * @param target 目标对象
  */
 public static void copyProperties(Object source, Object target) {
  try {
   BeanUtils.copyProperties(source, target);
  } catch (BeansException e) {
   LOGGER.error("BeanUtil property copy failed :BeansException", e);
  } catch (Exception e) {
   LOGGER.error("BeanUtil property copy failed:Exception", e);
  }
 }

2、List集合之间的对象属性赋值

/**
  * @param input 输入集合
  * @param clzz 输出集合类型
  * @param <E> 输入集合类型
  * @param <T> 输出集合类型
  * @return 返回集合
  */
 public static <E, T> List<T> convertList2List(List<E> input, Class<T> clzz) {
  List<T> output = Lists.newArrayList();
  if (CollectionUtils.isNotEmpty(input)) {
   for (E source : input) {
    T target = BeanUtils.instantiate(clzz);
    BeanUtil.copyProperties(source, target);
    output.add(target);
   }
  }
  return output;
 }

比如有两个类,User和Employee,将存储Employee对象的List赋给存储User对象的List。

User类:

public class User {
 private String name;
 private Integer age;
 
 public String getName() {
  return name;
 }
 
 public void setName(String name) {
  this.name = name;
 }
 
 public Integer getAge() {
  return age;
 }
 
 public void setAge(Integer age) {
  this.age = age;
 }
 
 @Override
 public String toString() {
  return "User{" +
    "name='" + name + '\'' +
    ", age=" + age +
    '}';
 }
}

Employee类:

public class Employee {
 private String name;
 
 private Integer age;
 private String dept;
 
 public Employee(String name, Integer age, String dept) {
  this.name = name;
  this.age = age;
  this.dept = dept;
 }
 
 public String getName() {
  return name;
 }
 
 public void setName(String name) {
  this.name = name;
 }
 
 public Integer getAge() {
  return age;
 }
 
 public void setAge(Integer age) {
  this.age = age;
 }
 
 public String getDept() {
  return dept;
 }
 
 public void setDept(String dept) {
  this.dept = dept;
 }
 
 @Override
 public String toString() {
  return "Employee{" +
    "name='" + name + '\'' +
    ", age=" + age +
    ", dept='" + dept + '\'' +
    '}';
 }
}

测试类:

@RunWith(PowerMockRunner.class)
public class TestUtil
{
 @Test
 public void test(){
  Employee ee1=new Employee("A",21,"it");
  Employee ee2=new Employee("B",23,"account");
  User user=new User();
  BeanUtil.copyProperties(ee1, user);
  System.out.println(user);
  System.out.println("-------------分割线--------------");
  List<User> output=new ArrayList<>();
  List<Employee> source= Arrays.asList(ee1,ee2);
  output=BeanUtil.convertList2List(source,User.class);
  for (User str:output) {
   System.out.println(str);
  }
 }
}

到此这篇关于使用BeanUtils.copyProperties进行对象之间的属性赋值的文章就介绍到这了,更多相关BeanUtils.copyProperties对象赋值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言指针数组案例详解

    C语言指针数组案例详解

    这篇文章主要介绍了C语言指针数组案例详解,本文通过案例详细的解释了指针与数组的初始化还有关系与应用,需要的朋友可以参考下这篇文章
    2021-07-07
  • Java中YYYY-MM-dd与yyyy-MM-dd的区别及跨年问题

    Java中YYYY-MM-dd与yyyy-MM-dd的区别及跨年问题

    YYYY-MM-dd可能会导致跨年周的日期被归属到错误的年份, yyyy-MM-dd总是表示实际的日历年份,无论日期所在的周是否跨年,本文就来介绍一下两者的区别,感兴趣的可以了解一下
    2024-01-01
  • 使用MyBatis查询千万级数据量操作实现

    使用MyBatis查询千万级数据量操作实现

    这篇文章主要为大家介绍了如何使用MyBatis 查询千万数据量的操作过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • java实现线程调度器和时间分片

    java实现线程调度器和时间分片

    线程调度器和时间分片是多线程编程和操作系统设计中的核心概念,本文主要介绍了java实现线程调度器和时间分片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • java的==运算符和equals操作详解

    java的==运算符和equals操作详解

    在Java中,==和equals都是用于比较两个对象的操作符,但它们的行为和用途有所不同,这篇文章主要介绍了java的==运算符和equals的相关知识,需要的朋友可以参考下
    2024-08-08
  • Kotlin 接口与 Java8 新特性接口详解

    Kotlin 接口与 Java8 新特性接口详解

    这篇文章主要介绍了Kotlin 接口与 Java8 新特性接口,Kotlin的接口是可以包含属性声明。Kotlin默认的声明是fianl 和public的。 Kotlin里嵌套的类默认并不是内部内,不包含对器外部类的隐式调用。下面我们来一起学习一下吧
    2019-06-06
  • SpringBoot如何自定义线程池配置类

    SpringBoot如何自定义线程池配置类

    有时候我们在项目中做一些长链路的跑批任务时,基于Springboot项目的定时任务,我们可以指定一个自定义的线程配置类进行单独提供给具体跑批任务使用,而不占用整个系统资源,这篇文章主要介绍了SpringBoot如何自定义线程池配置类,需要的朋友可以参考下
    2024-04-04
  • Java文件处理之使用XWPFDocument导出Word文档

    Java文件处理之使用XWPFDocument导出Word文档

    最近因项目开发的需要,整理了一份用JAVA导出WORD文档,下面这篇文章主要给大家介绍了关于Java文件处理之使用XWPFDocument导出Word文档的相关资料,需要的朋友可以参考下
    2023-12-12
  • Java开发中常用的 Websocket 技术参考

    Java开发中常用的 Websocket 技术参考

    WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,当然也支持客户端发送数据到服务端。
    2020-09-09
  • Java中import java.util.Scanner的用处详解

    Java中import java.util.Scanner的用处详解

    文章主要介绍Java中的Scanner类及其常用方法next()和nextLine()的区别,next()方法在遇到空格、Tab键、回车键等分隔符时结束输入,而nextLine()方法则接收所有输入,直到遇到回车键
    2024-11-11

最新评论