我们如果有两个具有很多相同属性名的JavaBean对象a和b,想把a中的属性赋值到b,例如
传统做法是手动set,即
- XxxQuery xxxQuery = new XxxQuery();
- xxxQuery .setAxx(xxxReqVo.getAxx());
- xxxQuery .setBxx(xxxReqVo.getBxx());
- xxxQuery .setCxx(xxxReqVo.getCxx());
-
如果有几十个需要赋值的的字段呢?那就很头疼了
org.springframework.beans.BeanUtils,它提供了对java反射和自省API的包装。它里面还有很多工具类,这里我们介绍一下该类下面的copyProperties方法,该工具方法可以帮我们大大简化这一步
- @Data
- public class User {
- private String id;
- private String name;
- private String age;
- private String account;
- private String password;
- }
-
- @Data
- public class Person {
- private String id;
- private String name;
- private String age;
- private String sex;
- }
- public class Test {
- public static void main(String[] args) {
- User user = new User();
- user.setId("1");
- user.setAge("2");
- user.setName("wzh");
- user.setAccount("wangzh");
- user.setPassword("1111");
- Person person = new Person();
- BeanUtils.copyProperties(user,person);
- }
- }
结果
Person(id=1, name=wzh, age=2, sex=null)
通过上述测试我们就可以总结出相关结论,基本用法为
BeanUtils.copyProperties(source,target);
相当于把源对象source的属性值赋给目标对象target中与源对象source的中有着同属性名的属性,如上述案例中Person作为目标对象与源对象User中有着共同的同名属性id,name,age,所以person中的这三个字段被赋值成功,赋值的数据来源正是user对象,sex这个字段是Person类所特有的,所以不会被赋值,同时还要特别注意赋值操作相关类的属性一定要有对应的setter/getter,即
源对象source的属性拷贝值赋给目标对象target的过程中,属性名和属性类型都相同的属性才能被成功拷贝赋值,例如id,name,age这三个目标对象的属性被赋值成功,目标对象中的sex属性,由于源对象中没有同名的属性所以没法被赋值成功。
做赋值的属性一定要有对应的setter/getter才能成功赋值