BeanCopier的简单使用

BeanCopier的简单使用

cglib包下的一个类.

简单栗子

// 创建实例.
BeanCopier copier = BeanCopier.create(source.getClass(), target.getClass(), false);
// Copy操作
copier.copy(person1, person2, null);

注意到:

第三个参数userConverter,是否开启Convert,默认BeanCopier只会做同名,同类型属性的copier,否则就会报错. 

举个栗子:在两对象复制过程中,难免会有某些字段属性名相同,但类型不同的情况,例如 Date time,String time, long time.这三种,在转换的时候如何处理。就需要自己写方法对相应的类型进行修改.

简单案例:

public class Test02 {
    public static void main(String[] args) {

        Person1 p1 = new Person1();
        Person2 p2 = new Person2();
        // 给p1赋值
        p1.setName("鲁智深");
        p1.setBirthday(new Date(834012360000L));

        BeanCopier copier = BeanCopier.create(Person1.class, Person2.class, true);
        //  根据需求编写的DateConverter类, 需要实现Converter接口.
        copier.copy(p1, p2, new DateConverter());

        System.out.println(p1);
        System.out.println(p2);

    }
}
----------
import org.springframework.cglib.core.Converter;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateConverter implements Converter {
    @Override
    public Object convert(Object value, Class target, Object context) {

        // a.isAssignableFrom(b), 查资料:即a是b的父类或接口 || a和b为同一个类或同一个接口 则返回true.
        // SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value), 设置pattern并转换时间格式.
        return value.getClass().isAssignableFrom(Date.class) ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value) : value;
    }
}

----------
import lombok.Data;

@Data
public class Person1 {
    private String name;
    private Date birthday;
}
----------
import lombok.Data;

@Data
public class Person2 {
    private String name;
    private String birthday;
}


  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BeanCopier是一个JavaBean之间属性拷贝的工具,可以快速地将一个JavaBean对象的属性值拷贝到另一个JavaBean对象中。以下是一个简单使用案例: 1. 导入相关依赖 ```xml <dependency> <groupId>net.sf.cglib</groupId> <artifactId>cglib</artifactId> <version>3.3.0</version> </dependency> ``` 2. 创建源类和目标类 ```java public class SourceBean { private String name; private int age; // 省略getter和setter方法 } public class TargetBean { private String name; private int age; // 省略getter和setter方法 } ``` 3. 使用BeanCopier进行属性拷贝 ```java public class BeanCopierTest { public static void main(String[] args) { SourceBean sourceBean = new SourceBean(); sourceBean.setName("张三"); sourceBean.setAge(18); TargetBean targetBean = new TargetBean(); BeanCopier copier = BeanCopier.create(SourceBean.class, TargetBean.class, false); copier.copy(sourceBean, targetBean, null); System.out.println(targetBean.getName()); // 输出:张三 System.out.println(targetBean.getAge()); // 输出:18 } } ``` 在上述代码中,我们首先创建了源类SourceBean和目标类TargetBean,然后在main方法中创建了一个源对象sourceBean并设置了属性值,同时创建了一个空的目标对象targetBean。 接下来,我们使用BeanCopier.create()方法创建了一个BeanCopier对象,并传入了源类和目标类的Class对象,以及一个布尔值表示是否使用转换器进行类型转换。最后,我们调用copy()方法进行属性拷贝,将源对象sourceBean的属性值拷贝到目标对象targetBean中。 最后,我们输出了目标对象targetBean的属性值,可以看到属性值已经被成功地拷贝过来了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值