BeanUtils.copyProperties 选择性赋值字段
2024-09-02 06:43:22
BeanUtils.copyProperties 在字段赋值上有强大的功能,如果有两个的类,如果需要将相同的字段赋值,就可以直接赋制。而不需要每个字段都需要一个一个赋制。
BeanUtils.copyProperties 用法全赋制
先创建一个实体类
public class User {
private String name;
private Integer age;
// 省略get/set方法
}
在赋制数据
User use = new User();
use.setName("jeremy");
use.setAge(23);
User newUser = new User();
BeanUtils.copyProperties(use,newUser);
System.out.println("赋制后的数据,姓名:"+ newUser.getName() + " 年龄:" + newUser.getAge() );
控制台输出如下数据,说明数据赋制成功。
赋制后的数据,姓名:jeremy 年龄:23
选择性赋制字段
在工作中不要全部赋制数据,需要有选择性赋制字段。
比如有三个字段 user1 , user2 , user3。
- user1 的 name 有值
- user2 的 age 有值
- user3 都没值
要将user1 的 name 值和user2 的 age 值赋值给user3。
BeanUtils.copyProperties 提供了忽略字段接口,源码如下:
public static void copyProperties(Object source, Object target, String... ignoreProperties) throws BeansException {
copyProperties(source, target, (Class)null, ignoreProperties);
}
其中 ignoreProperties,将字段排除在外。
以下是排除规则,如果字段为空,字段就不赋值。
public static String[] getNullPropertyNames (Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for(PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
实现上面的 user1,user2 的字段全都复制给 user3。
public static void main(String[] args) {
User user1 = new User();
user1.setName("jeremy");
User user2 = new User();
user2.setAge(23);
User user3 = new User();
BeanUtils.copyProperties(user1,user3);
System.out.println("user1 赋值给 user3 数据,姓名:" + user3.getName() + " 年龄:" + user3.getAge());
BeanUtils.copyProperties(user2,user3,getNullPropertyNames(user2));
System.out.println("user2 赋值给 user3 数据,姓名:" + user3.getName() + " 年龄:" + user3.getAge());
}
控制台输出如下数据,说明赋值成功。
user1 赋值给 user3 数据,姓名:jeremy 年龄:null
user2 赋值给 user3 数据,姓名:jeremy 年龄:23
如果觉得文章对你有帮助的话,请点个推荐吧!
最新文章
- AngularJS之指令
- 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
- Hello.js – Web 服务授权的 JavaScript SDK
- texstudio on ubuntu 12.04
- stream_copy_to_stream的使用
- Hash与Map
- 终端、shell、bash的区别联系
- [Java解惑]应用
- jQuery插件之Cookie
- JS内存泄露常见原因
- Jquery基础之ajax
- javascript语句语义大全(4)
- mvc中上传图片到指定文件夹中
- code force 403B.B. The Meeting Place Cannot Be Changed
- I/O----复制文本文件
- .NETCore 新型 ORM 功能介绍
- (PMP)解题技巧和典型题目分析(模拟二)
- Ubuntu 安装 JDK8 的两种方式
- android 解决子线程进行UI操作
- 全文居中及DIV居中
热门文章
- 测试工具_http_load
- 一道栈溢出babystack
- 查看服务backlog大小 Send-Q
- MyBatis学习(三)MyBatis基于动态代理方式的增删改查
- ACwing1216. 饮料换购
- IDEA启动报错:Error:java: Compilation failed: internal java compiler error
- 【LeetCode】1102. Path With Maximum Minimum Value 解题报告 (C++)
- 【LeetCode】690. Employee Importance 解题报告(Python)
- 【LeetCode】729. My Calendar I 解题报告
- 【LeetCode】851. Loud and Rich 解题报告(Python)