BeanUtils的使用

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/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);
	}
}

博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识、带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页