why? 如果有两个具有很多相同属性的类,例如实体类和Vo类,用传统的方式对属性进行逐个赋值
USerVo uservo = new UserVo(); uservo.setUsername = user.getUsername();
这样是非常麻烦的,代码量也比较多
so 这个时候我们使用 copyProperties
,直接一行,就可以搞定了。
import org.springframework.beans.BeanUtils; BeanUtils.copyProperties("转换前的类" , "转换后的类" );
例如:
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:
@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); }
执行结果:
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; }
执行结果:
[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 )]