BeanUtils.copyProperties的用法

本文最后更新于:2 分钟前

why?

如果有两个具有很多相同属性的类,例如实体类和Vo类,用传统的方式对属性进行逐个赋值

1
2
USerVo uservo = new UserVo();
uservo.setUsername = user.getUsername();

这样是非常麻烦的,代码量也比较多

so

这个时候我们使用 copyProperties,直接一行,就可以搞定了。

1
2
3
import org.springframework.beans.BeanUtils;

BeanUtils.copyProperties("转换前的类", "转换后的类");

例如:

1
BeanUtils.copyProperties(User, UserVo);

注意事项:

BeanUtils.copyProperties(a, b) 是将a中的值赋值给b

  • b中的存在的属性,a中一定要有,但是a中可以有多余的属性
  • a中与b中相同的属性都会被替换,不管是否有值
  • a、 b中的属性要名字相同,才能被赋值,不然的话需要手动赋值
  • Spring的BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法;
  • 不要导错包!(spring和apache的copy属性的方法源和目的参数的位置正好相反)

例子

示例1:

1
2
3
4
5
6
7
8
9
10
@Test
void test01() {
User u1 = new User("10086", "移动", "123456");
User u2 = new User("10010", "联通", "123456");
UserVo userVo = new UserVo();
System.out.println(userVo);
BeanUtils.copyProperties(u1, userVo);
System.out.println("===========分割线================");
System.out.println(userVo);
}

执行结果:

1
2
3
UserVo(account=null, username=null, password=null)
===========分割线================
UserVo(account=10086, username=移动, password=123456)

示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Test
void test02() {
User u1 = new User("10086", "移动", "123456");
User u2 = new User("10010", "联通", "123456");
List<User> userList = Arrays.asList(u1, u2);
System.out.println(userList);
List<UserVo> copyList = copyList(userList);
System.out.println("=================分割线==============");
System.out.println(copyList);
}

private List<UserVo> copyList(List<User> userList) {
List<UserVo> userVoList = new ArrayList<>();
for (User user : userList) {
userVoList.add(copy(user));
}
return userVoList;
}

private UserVo copy(User user) {
UserVo userVo = new UserVo();
BeanUtils.copyProperties(user, userVo);
return userVo;
}

执行结果:

1
2
3
4
5
[User(id=null, account=10086, username=移动, password=123456, salt=null, status=1, createTime=null, updateTime=null),
User(id=null, account=10010, username=联通, password=123456, salt=null, status=1, createTime=null, updateTime=null)]
=================分割线==============
[UserVo(account=10086, username=移动, password=123456),
UserVo(account=10010, username=联通, password=123456)]

本文作者: 仅安
本文链接: https://jinan6.vip/posts/3787288307/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!