1.1 简介

程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件。
BeanUtils组件, 作用是简化javabean的操作!

用户可以从www.apache.org下载BeanUtils组件,然后再在项目中引入jar文件!

使用BenUtils组件:

  • 1. 引入commons-beanutils-1.8.3.jar核心包
  • 引入日志支持包: commons-logging-1.1.3.jar

如果缺少日志jar文件,报错:
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.beanutils.ConvertUtilsBean.(ConvertUtilsBean.java:157)
at org.apache.commons.beanutils.BeanUtilsBean.(BeanUtilsBean.java:117)
at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:68)
at

1.2 实例, 基本用法

方法1: 对象属性的拷贝

BeanUtils.copyProperty(admin, "userName", "jack");
BeanUtils.setProperty(admin, "age", 18);

方法2: 对象的拷贝

BeanUtils.copyProperties(newAdmin, admin);

方法3: map数据拷贝到javabean中
【注意:map中的key要与javabean的属性名称一致】

BeanUtils.populate(adminMap, map);

例子

//1. 对javabean的基本操作@Testpublic void test1() throws Exception {// a. 基本操作Admin admin = new Admin();
//      admin.setUserName("Jack");
//      admin.setPwd("999");// b. BeanUtils组件实现对象属性的拷贝BeanUtils.copyProperty(admin, "userName", "jack");BeanUtils.setProperty(admin, "age", 18);// 总结1: 对于基本数据类型,会自动进行类型转换!// c. 对象的拷贝Admin newAdmin = new Admin();BeanUtils.copyProperties(newAdmin, admin);// d. map数据,拷贝到对象中Admin adminMap = new Admin();Map<String,Object> map = new HashMap<String,Object>();map.put("userName", "Jerry");map.put("age", 29);// 注意:map中的key要与javabean的属性名称一致BeanUtils.populate(adminMap, map);// 测试System.out.println(adminMap.getUserName());System.out.println(adminMap.getAge());}

1.3 实例, 日期类型的拷贝

需要注册日期类型转换器,2种方式参见下面代码:


public class App {//1. 对javabean的基本操作@Testpublic void test1() throws Exception {// a. 基本操作Admin admin = new Admin();
//      admin.setUserName("Jack");
//      admin.setPwd("999");// b. BeanUtils组件实现对象属性的拷贝BeanUtils.copyProperty(admin, "userName", "jack");BeanUtils.setProperty(admin, "age", 18);// 总结1: 对于基本数据类型,会自动进行类型转换!// c. 对象的拷贝Admin newAdmin = new Admin();BeanUtils.copyProperties(newAdmin, admin);// d. map数据,拷贝到对象中Admin adminMap = new Admin();Map<String,Object> map = new HashMap<String,Object>();map.put("userName", "Jerry");map.put("age", 29);// 注意:map中的key要与javabean的属性名称一致BeanUtils.populate(adminMap, map);// 测试System.out.println(adminMap.getUserName());System.out.println(adminMap.getAge());}//2. 自定义日期类型转换器@Testpublic void test2() throws Exception {// 模拟表单数据String name = "jack";String age = "20";String birth = "   ";// 对象Admin admin = new Admin();// 注册日期类型转换器:1, 自定义的方式ConvertUtils.register(new Converter() {// 转换的内部实现方法,需要重写@Overridepublic Object convert(Class type, Object value) {// 判断if (type != Date.class) {return null;}if (value == null || "".equals(value.toString().trim())) {return null;}try {// 字符串转换为日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.parse(value.toString());} catch (ParseException e) {throw new RuntimeException(e);}}},Date.class);// 把表单提交的数据,封装到对象中BeanUtils.copyProperty(admin, "userName", name);BeanUtils.copyProperty(admin, "age", age);BeanUtils.copyProperty(admin, "birth", birth);//------ 测试------System.out.println(admin);}//2. 使用提供的日期类型转换器工具类@Testpublic void test3() throws Exception {// 模拟表单数据String name = "jack";String age = "20";String birth = null;// 对象Admin admin = new Admin();// 注册日期类型转换器:2, 使用组件提供的转换器工具类ConvertUtils.register(new DateLocaleConverter(), Date.class);// 把表单提交的数据,封装到对象中BeanUtils.copyProperty(admin, "userName", name);BeanUtils.copyProperty(admin, "age", age);BeanUtils.copyProperty(admin, "birth", birth);//------ 测试------System.out.println(admin);}
}

1.4 应用

public class WebUtils {@Deprecatedpublic static <T> T copyToBean_old(HttpServletRequest request, Class<T> clazz) {try {// 创建对象T t = clazz.newInstance();// 获取所有的表单元素的名称Enumeration<String> enums = request.getParameterNames();// 遍历while (enums.hasMoreElements()) {// 获取表单元素的名称:<input type="password" name="pwd"/>String name = enums.nextElement();  // pwd// 获取名称对应的值String value = request.getParameter(name);// 把指定属性名称对应的值进行拷贝BeanUtils.copyProperty(t, name, value);}return t;} catch (Exception e) {throw new RuntimeException(e);}}/*** 处理请求数据的封装*/public static <T> T copyToBean(HttpServletRequest request, Class<T> clazz) {try {// (注册日期类型转换器)// 创建对象T t = clazz.newInstance();BeanUtils.populate(t, request.getParameterMap());return t;} catch (Exception e) {throw new RuntimeException(e);}}
}

BeanUtils工具相关推荐

  1. BeanUtils工具类,简化数据封装

     login.html中form表单的action路径的写法         * 虚拟目录+Servlet的资源路径 BeanUtils工具类,简化数据封装         * 用于封装JavaBea ...

  2. BeanUtils工具的使用(转载)

    原文章地址:https://www.cnblogs.com/vmax-tam/p/4159985.html BeanUtils工具 什么是BeanUtils工具 BeanUtils工具是一种方便我们对 ...

  3. BeanUtils工具类

    BeanUtils工具类,简化数据封装 用于封装JavaBean的 JavaBean:标准的Java类 要求: 1. 类必须被public修饰 2. 必须提供空参的构造器 3. 成员变量必须使用pri ...

  4. 丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 在前几天的文章<为什么阿里巴巴禁止使用Apache Bean ...

  5. beanutils工具类_16 个超级实用的 Java 工具类!

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  6. beanutils工具类_Apache Commons 工具类介绍及简单使用

    来源:http://h5ip.cn/9xu3 Apache Commons 工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值,肥朝用大白话说就是,一颗好白菜都让猪给拱 ...

  7. spring的beanutils工具类_基于spring-beans实现工具类BeanUtils基于Class实例化注入对象及查找方法、复制属性等操作...

    一.前言 基于spring-beans(4.1.4)的工具类org.springframework.beans.BeanUtils对注入spring对象按照Class实例化instantiateCla ...

  8. BeanUtils工具的使用

    BeanUtils 属性拷贝 BeanUtils.copyProperties(a, b); 注意 在不同的包下面,拷贝顺序相反 org.springframework.beans.BeanUtils ...

  9. 十年后,这款优秀的工具终于给出了不开源的原因

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://mulanos.oschina.net/ ...

  10. BeanUtils 是用 Spring 的还是 Apache 的好?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | urlify.cn/vUfIry 前言 在我们实际项目开 ...

最新文章

  1. 在线代码格式化,在线JSON校验格式化
  2. 【Linux 操作系统】 Secure CRT 终端配置 -- 配置语法高亮 光标 和 字体
  3. 实践重于理论——创建一个监控程序探测WCF的并发处理机制
  4. FPGA篇(三)基于FPGA的几种排序算法
  5. 1787: [Ahoi2008]Meet 紧急集合
  6. Java Math Expression Engine
  7. 2440 linux文件写,添加yaffs2文件系统 - Linux2.6.39在S3C2440上的移植_Linux编程_Linux公社-Linux系统门户网站...
  8. 有钱人是怎么挣钱的?
  9. OpenSSF 获1000万美元投资,提升开源软件和软件供应链安全
  10. 自己动手写DB数据库框架(增)
  11. layui table 复选框数据_Python操作三大数据库 Mysql
  12. Android 开发者不得不面对的六个问题
  13. 低代码,想说爱你不容易
  14. oracle odi 目标数据存储: 临时目标数据存储未与连接关联,ODI知识模块--IKM Oracle Incremental Update...
  15. 升级计算机的图形卡和驱动程序,Win10更新显卡驱动程序后无法开机怎么办?解决方案...
  16. 【学习KubeEdge】
  17. 自定义容器实现类似Windows屏保功能
  18. 有谁知道iphone XR的“R”到底是什么意思?答案可能会让你们无奈
  19. 端端Clouduolc同步索引简述
  20. Hystrix组件学习(一)

热门文章

  1. python win32com模块
  2. 海思hitool工具使用
  3. 软件工程造价是做什么的?
  4. linux系统中怎么安装谷歌浏览器,linux怎么安装谷歌浏览器?
  5. Axure RP 8 激活
  6. Vlan的详解-----看完明白tag and untagged
  7. java开发工程师简历项目经验怎么写?应该注意哪些事项?
  8. Linux安装winetim简单教程,ubuntu wine安装TIM
  9. 微信小程序优惠券的购买和核销的操作流程设计
  10. 利用project编制进度计划