`

常用jar包之commons-beanutils使用

阅读更多
核心提示:Jakarta Commons 项目提供了相当丰富的API,我们之前了解到的Commons Lang只是众多API的比较核心的一小部分而已。Commons下面还有相当数量的子项目,用于解决各种各样不同方向的实际问题,BeanUtils就是其中的一个,用于处理JavaBeans。它利用Java的反射机制


Jakarta Commons项目提供了相当丰富的API,我们之前了解到的Commons Lang只是众多API的比较核心的一小部分而已。Commons下面还有相当数量的子项目,用于解决各种各样不同方向的实际问题,BeanUtils就是其中的一个,用于处理JavaBeans。它利用Java的反射机制,从动态的生成对bean的getter和setter的调用代码,到模拟创建一个动态的bean,等等。这个包看似简单,却是很多开源项目的基石:如在著名的Struts和Spring Framework中,我们都能找到BeanUtils的影子。大家猜猜看,有哪位名人是BeanUtils的作者之一?没错,就是Struts的创始人Craig McClanahan。
BeanUtils最核心的好处在于:我们在编码时,并不需要知道我们处理的JavaBeans具体是什么类型,有哪些属性,这些信息是可以动态获取的,甚至我们都可以不必去关心事实上是否存在这样一个具体的JavaBean类。我们只需要知道有一个JavaBean的实例,我们需要从中取得某个属性,设定某个属性的值,或者仅仅是需要一个属性表。要做到这些,依靠Sun提供的JavaBean规范似乎找不到一个很直接的方式,除非硬编码,将getXxxx()和setXxxx()直接写进我们的程序。但是这样就大大增加了代码的复杂度、耦合性和维护成本。还好Commons BeanUtils对这个问题提供了一种优雅的解决方案。
我们有两种途径获取Commons BeanUtils的binary:
1- 从Struts、Spring或者任何依赖BeanUtils的开源产品的发行包中找到相应的jar文件;
2- 从http://www.apache.org/dist/jakarta/commons/beanutils/binaries/下载。
Commons BeanUtils的源码下载地址:
http://www.apache.org/dist/jakarta/commons/beanutils/source/
Commons BeanUtils一共包括如下5个包:
org.apache.commons.beanutils – 核心包,定义一组Utils类和需要用到的接口规范
org.apache.commons.beanutils.converters – 转换String到需要类型的类,实现Converter接口
org.apache.commons.beanutils.locale – beanutils的locale敏感版本
org.apache.commons.beanutils.locale.converters – converters的locale敏感版本
org.apache.commons.collections – beanutils使用到的Collection类
其中需要我们特别关注的是这个org.apache.commons.beanutils包,其他包都是起辅助作用的。接下来我们就来看看如何使用beanutils包
     1.PropertyUtils

  它支持三种类型的属性值-Simple,Indexed,Mapped
  Simple属性访问方法

1.  PropertyUtils.getSimpleProperty(Object bean, String name)    
2.  PropertyUtils.setSimpleProperty(Object bean, String name, Object value)   

  实现代码:

1.   Employee employee = ...;   
2.   String firstName = (String)   
3.   PropertyUtils.getSimpleProperty(employee, "firstName");   
4.   String lastName = (String)   
5.   PropertyUtils.getSimpleProperty(employee, "lastName");   
6.   ... manipulate the values ...   
7.   PropertyUtils.setSimpleProperty(employee, "firstName", firstName);   
8.   PropertyUtils.setSimpleProperty(employee, "lastName", lastName);  

  Indexed属性访问方法

1.  PropertyUtils.getIndexedProperty(Object bean, String name)    
2.  PropertyUtils.getIndexedProperty(Object bean, String name, int index)    
3.  PropertyUtils.setIndexedProperty(Object bean, String name, Object value)    
4.  PropertyUtils.setIndexedProperty(Object bean, String name, int index, Object value)  

  实现代码:

1.  Employee employee = ...;   
2.   int index = ...;   
3.   String name = "subordinate[" + index + "]";   
4.   Employee subordinate = (Employee)   
5.   PropertyUtils.getIndexedProperty(employee, name);//根据value取得属性   
6.   Employee employee = ...;   
7.   int index = ...;   
8.   Employee subordinate = (Employee)   
9.   PropertyUtils.getIndexedProperty(employee, "subordinate", index);//根据索引值取的属性值  

  Mapped属性访问方法

1.  PropertyUtils.getMappedProperty(Object bean, String name)    
2.  PropertyUtils.getMappedProperty(Object bean, String name, String key)    
3.  PropertyUtils.setMappedProperty(Object bean, String name, Object value)    
4.  PropertyUtils.setMappedProperty(Object bean, String name, String key, Object value)  

  实现代码:

1.  Employee employee = ...;   
2.   Address address = ...;   
3.   PropertyUtils.setMappedProperty(employee, "address(home)", address);//根据数组   
4.  //内的值来去的相应的属性值   
5.   Employee employee = ...;   
6.   Address address = ...;   
7.   PropertyUtils.setMappedProperty(employee, "address", "home", address);  

  Nested属性访问方法//Nested的意思是参数中包含组件

1.  PropertyUtils.getNestedProperty(Object bean, String name)    
2.  PropertyUtils.setNestedProperty(Object bean, String name, Object value)   
3.  实现代码:   
4.  String city = (String) PropertyUtils.getNestedProperty(employee,    
5.  "address(home).city");  

  2.BeanUtils.DynaBean and BeanUtils.DynaClass 接口介绍
  DynaBean必须有一个bean来实现这个接口,DynaClass必有一个bean的属性集来实现  BasicDynaBean and BasicDynaClass - 基本的 Dynamic 类型
  基本的API:

1.  BasicDynaClass(java.lang.String name, java.lang.Class dynaBeanClass, DynaProperty[] properties)    
2.  BasicDynaBean(DynaClass dynaClass)   

  我们定义一下基本的代码:

1.  //定义动态属性集   
2.  DynaProperty[] props = new DynaProperty[]{   
3.   new DynaProperty("address", java.util.Map.class),   
4.   new DynaProperty("subordinate", mypackage.Employee[].class),   
5.   new DynaProperty("firstName", String.class),   
6.   new DynaProperty("lastName", String.class)   
7.   };   
8.  //创建动态类来设定动态属性值   
9.   BasicDynaClass dynaClass = new BasicDynaClass("employee", null, props);   
10.  DynaBean employee = dynaClass.newInstance();   
11.   employee.set("address", new HashMap());   
12.   employee.set("subordinate", new mypackage.Employee[0]);   
13.   employee.set("firstName", "Fred");   
14.   employee.set("lastName", "Flintstone");  

  ResultSetDynaClass (Wraps ResultSet in DynaBeans) - 使用 ResultSet 的Dynamic JavaBean
  API:

1.  ResultSetDynaClass(java.sql.ResultSet resultSet)   
2.  ResultSetDynaClass(java.sql.ResultSet resultSet, boolean lowerCase)    
3.  Connection conn = ...;   
4.   Statement stmt = conn.createStatement();   
5.   ResultSet rs = stmt.executeQuery   
6.   ("select account_id, name from customers");   
7.   Iterator rows = (new ResultSetDynaClass(rs)).iterator();   
8.   while (rows.hasNext()) {   
9.  //利用动态bean进行输出   
10.   DynaBean row = (DynaBean) rows.next();   
11.   System.out.println("Account number is " +   
12.   row.get("account_id") +   
13.   " and name is " + row.get("name"));   
14.   }   
15.   rs.close();   
16.   stmt.close();  

  RowSetDynaClass (Disconnected ResultSet as DynaBeans) - 使用 RowSet 的 Dynamic JavaBean
  API:

1.  RowSetDynaClass(java.sql.ResultSet resultSet)   
2.  RowSetDynaClass(java.sql.ResultSet resultSet, boolean lowerCase)    
3.   Connection conn = ...; // 从缓冲池取得连接   
4.   Statement stmt = conn.createStatement();   
5.   ResultSet rs = stmt.executeQuery("SELECT ...");   
6.   RowSetDynaClass rsdc = new RowSetDynaClass(rs);   
7.   rs.close();   
8.   stmt.close();   
9.   ...; //关闭连接返回缓冲池   
10.   List rows = rsdc.getRows();   
11.   ...; // 处理得到的行  

  3.BeanUtils.ConvertUtils 介绍
  这个包主要用来转换从request传递过来的函数
  主要函数:


1.  ConvertUtils().convert(java.lang.Object value)    
2.  ConvertUtils().convert(java.lang.String[] values, java.lang.Class clazz)    
3.  ConvertUtils().convert(java.lang.String value, java.lang.Class clazz)  

  实现例子:


1.   HttpServletRequest request = ...;   
2.   MyBean bean = ...;   
3.   HashMap map = new HashMap();   
4.   Enumeration names = request.getParameterNames();   
5.   while (names.hasMoreElements()) {   
6.   String name = (String) names.nextElement();   
7.   map.put(name, request.getParameterValues(name));   
8.   }   
9.   BeanUtils.populate(bean, map);//用ConvertUtils进行转换  

  目前支持的转换类型:

1.  sjava.lang.BigDecimal    
2.  java.lang.BigInteger    
3.  boolean and java.lang.Boolean    
4.  byte and java.lang.Byte    
5.  char and java.lang.Character    
6.  java.lang.Class    
7.  double and java.lang.Double    
8.  float and java.lang.Float    
9.  int and java.lang.Integer    
10.  long and java.lang.Long    
11.  short and java.lang.Short    
12.  java.lang.String    
13.  java.sql.Date    
14.  java.sql.Time    
15.  java.sql.Timestamp   



http://ajava.org/course/java/11574.html
参考:http://hannoi2009.blog.163.com/blog/static/122828428200971571520398/
分享到:
评论

相关推荐

    电动车上牌管理系统 SSM毕业设计 附带论文.zip

    电动车上牌管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl

    tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl

    【eclipse和idea两个版本运行源码】基于Java Swing +mysql 实现的网吧管理系统

    一、项目简介 本项目是一套基于Java Swing 开发的网吧管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 二、技术实现 ​后台技术:java swing ​数据库:MySQL ​数据库连接池:c3p0 三、系统主要功能 用户登录: 分为 普通用户和管理员 两种角色 菜单模块:上机,下机, 系统设置:管理员设置,会员设置,计费设置, 退出系统 管理模块:增加会员,删除会员,信息修改,信息查询 视图模块:主页视图,在线用户,统计视图, 统计报表模块:人数报表,收入报表 帮助模块:联系我们,关于系统 详见:https://blog.csdn.net/weixin_43860634/article/details/125247764

    pc-dmis软件脚本-输出Excel格式报告

    使用软件自带的basic脚本编辑制作的脚本 低版本软件无法输出Excel报告,可以通过脚本方式实现这一功能

    【java毕业设计】校园失物招领系统源码(springboot+vue+mysql+说明文档).zip

    项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse

    基于java的网上电子书店h答辩PPT.pptx

    基于java的网上电子书店h答辩PPT.pptx

    基于微信小程序的微信小程序校园失物招领答辩PPT.pptx

    基于微信小程序的微信小程序校园失物招领答辩PPT.pptx

    基于java的基于Java的学生综合测评管理系统答辩PPT.pptx

    基于java的基于Java的学生综合测评管理系统答辩PPT.pptx

    pandas-2.1.4-cp39-cp39-win_amd64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    判断题 - 题目列表 - 图-练习题集飒飒阿萨

    springboot体育器材管理系统(附源码+数据库)71175

    管理员功能: 用户管理:管理员可以管理用户账户,包括审核新注册用户、禁用违规用户、重置密码等操作。 器材管理:管理员可以管理器材的信息,包括添加新器材、编辑器材详情、设定器材规则和限制等。 器材预约与借还管理:管理员可以处理用户的器材预约请求,确认或调整预约时间,并记录借还操作。 库存管理:管理员可以监控器材库存情况,及时补充不足的器材并处理损坏或报废的器材。 数据统计与报表:管理员可以分析系统的使用情况和借还记录,生成数据统计报表以了解器材使用情况和借还频率等。 系统设置与维护:管理员可以进行系统设置,包括配置器材规则、设定可用时间段、备份数据、优化系统性能等。 消息通知与提醒:管理员可以向用户发送消息通知,如器材预约成功、归还提醒、系统更新通知等。

    Jira插件安装包Dynamic-forms

    Jira插件安装包Dynamic-forms

    pandas-2.1.4-cp311-cp311-win_amd64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    少儿图形化scratch编程作品源码集100个

    Scratch是一款由麻省理工学院(MIT)的“终身幼儿园团队”开发的图形化编程工具,专为儿童设计,旨在帮助他们学习编程思维和逻辑能力。

    基于java的学生就业管理系统答辩PPT.pptx

    基于java的学生就业管理系统答辩PPT.pptx

    课设毕设基于SpringBoot+Vue的旅游门票信息系统设计与实现源码可运行.zip

    本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac

    大学志愿填报系统.zip

    随着社会对志愿服务活动的日益重视,各大高校也纷纷参与到志愿服务的行列中。为了更好地管理和记录志愿者活动,提高志愿服务的质量和效率,我们开发了这款大学志愿服务系统。 该系统主要包括多个功能模块,如信息管理、活动管理、学生管理等。信息管理模块允许学校管理员录入、修改和删除学校的基本信息,包括学校账号、名称、联系电话、地址、特色以及办学理念等,确保信息的准确性和完整性。活动管理模块则用于记录和管理志愿者活动的相关信息,包括活动的名称、时间、地点、参与人员等,方便志愿者进行报名和签到。 此外,系统还提供了学生管理模块,用于记录学生的志愿服务经历和表现,为学生参与志愿服务提供便利。同时,系统还支持照片上传和展示功能,通过展示志愿者活动的照片,让更多人了解和关注志愿服务事业。 整个系统界面简洁明了,操作便捷,功能强大。通过使用该系统,高校可以更加高效地管理和记录志愿者活动,提高志愿服务的整体水平。同时,该系统也为广大志愿者提供了一个展示自我、服务社会的平台。

    turbo均衡算法研究

    turbo均衡算法研究

    静态编译的Qt6.7.3(win10+MSVC2022+openssl+静态运行时) part01

    https://blog.csdn.net/aggs1990/article/details/143491823 静态编译的Qt6.7.3(win10+MSVC2022+openssl+静态运行时) 压缩包比较大,这是第一部分

    tornado-6.4b1-cp38-abi3-musllinux_1_1_i686.whl

    tornado-6.4b1-cp38-abi3-musllinux_1_1_i686.whl

Global site tag (gtag.js) - Google Analytics