如何使用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对象赋值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java Beanutils.copyProperties( )用法详解

    这是一篇开发自辩甩锅稿~~~~ 昨天测试小姐姐将我的一个bug单重开了,emmmm....内心OS:就调整下对象某个属性类型这么简单的操作,我怎么可能会出错呢,一定不是我的锅!!but再怎么抗拒,bug还是要改的,毕竟晚上就要发版本了~~ 老老实实将我前天改的部分跟了一遍,恩,完美,没有任何的缺失~~but本应success的测试数据,接口返还的结果确实是false来着,那还是老老实实debug吧. 一步步跟下来,恩,多么顺畅,就说一定不是我的锅~~诶?不对不对,这里的ID值,为啥是null?传

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

    1.使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get.set方法一个一个属性的赋值 /** * 对象属性拷贝 <br> * 将源对象的属性拷贝到目标对象 * * @param source 源对象 * @param target 目标对象 */ public static void copyProperties(Object source, Object target) { try { BeanU

  • BeanUtils.copyProperties复制对象结果为空的原因分析

    目录 BeanUtils.copyProperties复制对象结果为空原因 正确的包 错误的包 两个类的区别 BeanUtils.copyProperties拷贝没成功的坑,记录解决原因 具体如下 BeanUtils.copyProperties复制对象结果为空原因 细心比对,发现原来是导错了包导致的 正确的包 import org.springframework.beans.BeanUtils; 错误的包 import org.apache.commons.beanutils.BeanUtil

  • 浅谈C++中对象的复制与对象之间的相互赋值

    C++对象的复制 有时需要用到多个完全相同的对象,例如,同一型号的每一个产品从外表到内部属性都是一样的,如果要对每一个产品分别进行处理,就需要建立多个同样的对象,并要进行相同的初始化,用以前的办法定义对象(同时初始化)比较麻烦.此外,有时需要将对象在某一瞬时的状态保留下来. C++提供了克隆对象的方法,来实现上述功能.这就是对象的复制机制. 用一个已有的对象快速地复制出多个完全相同的对象.如 Box box2(box1); 其作用是用已有的对象box1去克隆出一个新对象box2. 其一般形式为:

  • 浅谈java对象之间相互转化的多种方式

    第一种:使用org.apache.commons.beanutils.PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean. 特点: 1.它的性能问题相当差 2.PropertyUtils有自动类型转换功能,而java.util.Date恰恰是其不支持的类型 3.PropertyUtils支持为null的场景: public static void copyProperties(Object de

  • 基于Beanutils.copyProperties()的用法及重写提高效率

    目录 Beanutils.copyProperties()用法及重写提高效率 一.简介 二.用法 三.重写 原理 BeanUtils.copyProperties 使用注意 示例演示 开始进行示例 最后强调 Beanutils.copyProperties()用法及重写提高效率 特别说明本文介绍的是Spring(import org.springframework.beans.BeanUtils)中的BeanUtils.copyProperties(A,B)方法.是将A中的值赋给B.apache

  • BeanUtils.copyProperties()参数的赋值顺序说明

    目录 BeanUtils.copyProperties()参数的赋值顺序 BeanUtils.copyProperties初体验,及其参数含义解释 用处 案例: 创建一个源类:source 创建一个目标target源类 创建测试类test ignoreProperties参数 案例 案例测试 BeanUtils.copyProperties()参数的赋值顺序 BeanUtils.copyProperties(x,y)有两个不同的jar包,引入不同的包,赋值的顺序不一样. 分别是: org.spr

  • BeanUtils.copyProperties复制不生效的解决

    目录 前言 问题的排查 问题的扩展 前言 呵呵 前端时间使用 BeanUtils.copyProperties 的时候碰到了一个这样的问题 我有两个实体, 有同样的属性, 一个有给定的属性的 getter, 另外一个有 给定的属性的 setter, 但是 我使用 BeanUtils.copyProperties 的时候 把来源对象的这个属性 复制不到 目标对象上面 然后 当时也跟踪了一下代码, 然后 这里整理一下 改代码片段吧 然后在调试的过程中 也发现了一些其他的问题, 呵呵 算是额外的了解吧

  • 聊聊BeanUtils.copyProperties和clone()方法的区别

    目录 首先,BeanUtils有两种: 效率: 需要在pom文件中引入这个包 在pom文件里面引入所需要的包 新建一个实体类StudentEntity实现Cloneable接口 测试方法 最近撸代码的时候发现有人将一个对象的值赋给另一个对象的时候,并没有使用常规的set/get方法去给对象赋值,而是采用BeanUtils.copyProperties(A,B)这个方法去赋值,但是有的还是有局限性,比如Date类型的值无法赋值,只能赋值为null,所以我大致百度了一下,作为记录. 首先,BeanU

  • MyBatis拦截器:给参数对象属性赋值的实例

    该拦截器的作用:在进行增加.修改等操作时,给数据模型的一些通用操作属性(如:创建人.创建时间.修改人.修改时间等)自动赋值. 该实现是在DAO层拦截,即存入DB前最后一层.后经分析,不是很合理,改为在service层拦截,用spring AOP来实现了,该代码遂弃用.不过已经测试可用,记录备忘. package com.development; import java.lang.reflect.InvocationTargetException; import java.util.Date; i

  • 解决Beanutils.copyproperties实体类对象不一致的问题

    今天给大家分析一个解决Beanutils.copyproperties实体类对象名不一致的解决方法,一般我们在两个对象拷贝的问题上,我个人用的比较多的就是Beanutils.copyproperties,字段名如果不一致的话就去实体类中使用重载,把当前实体类的对象赋值给另外一个对象,也有用到set(),当然这些也都能解决Beanutils.copyproperties实体类属性不一致的问题,不过今天要给大家分享的是,不用set()和实体类的重构,使用类的反射机制去完成! 话不多说直接开始: 我是

随机推荐