版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.youkuaiyun.com/sun8112133/article/details/90754359
文章目录
一、BeanUtils概述
Commons BeanUtils 是Apache组织提供的一个对Bean进行操作的开源工具类库,它主要用于简化JavaBean 封装数据的操作。
1、BeanUtils使用场景
A. 快速将一个 Beanc对象 各个属性的值,赋值给具有相同结构的另一个 Bean对象 中。
B. 快速收集表单中的所有数据到 Bean对象 中,拒绝过去繁琐操作(↓)。

2、Bean概述
只要就在Java中的对象都可以称为 Bean,也有人称为是POJO(不了解 POJO 的童鞋请点击这里) 。
二、BeanUtils使用
1、导入jar包
commons-beanutils-1.8.3.jar(BeanUtils核心包)、commons-logging-1.1.1.jar(日志记录包)
2、常用方法
1)赋值和取值
对 Bean对象的属性进行赋值和取值操作。
- getProperty(Bean对象, 属性名, 属性值)
语法格式:
public static void setProperty(Object bean, String name, Object value)
注: 给指定 bean对象 的 name属性 赋值为指定 value值。
如果指定的属性不存在,则什么也不发生。
- setProperty(Bean对象, 属性名)
public static String getProperty(Object bean, String name)
注: 获取指定 bean对象 指定的 name属性的值。
如果指定的属性不存在,则会抛出异常。
当属性的类型是数组类型时,获取到的值是数组中的第一个值。
2)拷贝属性
将一个 Bean对象中的所有属性赋值给另一个 Bean对象中
- copyProperty(目标对象, 源对象)
public static void copyProperties(Object desc, Object src)
注: 将 src对象 的属性值赋值给 desc对象 对应的属性。
只有属性名相同且类型一致的才能赋值成功。
3)封装Bean对象
将一个Map集合的数据封装到一个 Bean对象
- populate(Bean对象, map集合)
public static void populate(Object bean, Map map)
注: 将一个 Map集合中的数据封装到指定 bean对象 中,
bean对象 的属性名和 Map集合中键要相同。
3、案例演示
- 实体类(User类)
public class User {
private String name;
private int age;
private String phone;
// set...() & get...()
}
1)对 Bean对象的属性进行赋值和取值操作
public class Demo {
public static void main(String[] args) throws Exception {
// 创建User对象
User user = new User();
// BeanUtils的赋值操作
BeanUtils.setProperty(user, "name", "张三");
BeanUtils.setProperty(user, "age", "20");
BeanUtils.setProperty(user, "phone", "110");
// BeanUtils的取值操作
System.out.println("name: " + BeanUtils.getProperty(user, "name"));
System.out.println("age: " + BeanUtils.getProperty(user, "age"));
System.out.println("phone: " + BeanUtils.getProperty(user, "phone"));
}
}
2)将一个 Bean对象的所有属性赋值给另一个 Bean对象中
public class Demo {
public static void main(String[] args) throws Exception {
// 创建User对象
User user = new User("李四", 18, "120");
// 再创建一个新的User对象
User user2 = new User();
// 将 user对象中的属性 拷贝到 user2中
BeanUtils.copyProperties(user2, user);
System.out.println(user2);
}
}
3)将一个Map集合的数据封装到一个 Bean对象
- 案例一: 将一个Map集合的数据封装到一个 Bean对象
public class Demo {
public static void main(String[] args) throws Exception {
// 创建一个Map集合
Map<String, Object> map = new HashMap<>();
// 添加元素
map.put("name", "王五");
map.put("age", 30);
map.put("phone", "119");
// 创建一个Bean对象
User user = new User();
// 将Map集合的数据封装到 User对象中
BeanUtils.populate(user, map);
System.out.println(user);
}
}
- 案例二: 快速收集表单中的所有数据到 Bean对象

public class Register extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 创建User对象
User user = new User();
// 将表单中的数据直接封装到User对象中
BeanUtils.populate(user, request.getParameterMap());
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
4)表单中有时间字段
若表单中有时间字段,就必须要注册一个时间转换器,规定好前台传来的时间格式,否则会报错。

public class Register extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 注册时间转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class c, Object value) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse((String) value);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}, java.util.Date.class);
// 创建User对象
User user = new User();
// 将表单中的数据直接封装到User对象中
BeanUtils.populate(user, request.getParameterMap());
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}