简介

BeanUtils工具包是由Apache公司所开发,提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。

我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

如果我们使用BeanUtils工具包就可以很方便的对JavaBean类能够进行简便的操作。

使用与依赖包:commons-beanutils-1.9.3.jar ;commons-logging-1.2.jar

BeanUtils工具对JavaBean类的操作:

① BeanUtils 可以便于对javaBean的属性进行赋值。

② BeanUtils 可以便于对javaBean的对象进行赋值。

③ BeanUtils 可以将一个MAP集合的数据拷贝到一个javabean对象中。

BeanUtils常用方法:

方法名 返回值 说明
copyProperties(Object dest,Object orig) void 把orig中的值copy到dest中
describe(Object bean) Map 把Bean的属性值放入一个Map里面
populate(Object bean,Map properties) void 把properties里面的值放如bean中
setProperty(Object bean,String name,Object value) void 设置bean对象的名称为name的property的值为value
getProperty(Object bean,String name) String  取得bean对象中名为name的属性的值

BeanUtils的使用:

约定前提:参数名称必须要和JavaBean的属性名称保持一致。

 public class User {

     private int id;
private String username;
private String email;
private String password;
private String name;
private String phone;
private String address; public User() {
super();
} public User(String username, String email, String password, String name, String phone, String address) {
super();
this.username = username;
this.email = email;
this.password = password;
this.name = name;
this.phone = phone;
this.address = address;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", email=" + email + ", password=" + password + ", name="
+ name + ", phone=" + phone + ", address=" + address + "]";
} }

JavaBean Code

例如:用户注册,服务器端获取浏览器端提交的注册表单数据,然后将用户输入的注册信息持久化到数据库中。

浏览器端:表单中<input type="text" name="username">的name属性必须与JavaBean类的属性名一致。

         <form action="${pageContext.request.contextPath }/user_register"
method="post">
<div class="register-top-grid">
<h3>注册新用户</h3>
<div class="input">
<span>用户名 <label style="color: red;">*</label></span>
<input type="text" name="username" placeholder="请输入用户名" required="required">
</div>
<div class="input">
<span>邮箱 <label style="color: red;">*</label></span>
<input type="text" name="email" placeholder="请输入邮箱" required="required">
</div>
<div class="input">
<span>密码 <label style="color: red;">*</label></span>
<input type="text" name="password" placeholder="请输入密码" required="required">
</div>
<div class="input">
<span>收货人<label></label></span>
<input type="text" name="name" placeholder="请输入收货">
</div>
<div class="input">
<span>收货电话<label></label></span>
<input type="text" name="phone" placeholder="请输入收货电话">
</div>
<div class="input">
<span>收货地址<label></label></span>
<input type="text" name="address" placeholder="请输入收货地址">
</div>
<div class="clearfix"></div>
</div>
<div class="register-but text-center">
<input type="submit" value="提交">
<div class="clearfix"></div>
</div>
</form>

HTML Code

服务器端:在不使用BeanUtils的情况下获取数据,每一条数据都进行获取并对每个属性逐个赋值;

通过这样的方法如果表单属性字段很多,达到了100、1000甚至更多,那我们不是要写100、1000行重复的代码了吗。谁都不愿意这样做。

     protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 构建User对象
User user = new User(); // 获取请求中表单提交的数据
String username = request.getParameter("username");
String email = request.getParameter("email");
String password = request.getParameter("password");
String name = request.getParameter("name");
String phone = request.getParameter("phone");
String address = request.getParameter("address"); // 把获取到的数据赋值到user对象中
user.setUsername(username);
user.setEmail(email);
user.setPassword(password);
user.setName(name);
user.setPhone(phone);
user.setAddress(address); // 将user对象持久化到数据库中
uService.register(username);
request.setAttribute("msg", "注册成功,请登录");
request.getRequestDispatcher("/user_login.jsp").forward(request, response);
}

而我们使用 BeanUtils.copyProperties() 方法以后,代码量大大的减少,而且整体程序看着也简洁明朗,代码如下:

     protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 构建User对象
User user = new User(); try {
// 获取表单请求中的Map集合,将集合中的数据copy到user对象中;所提交请求中的请求参数和请求参数值的映射关系。
BeanUtils.copyProperties(user, request.getParameterMap());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} // 将user对象持久化到数据库中
uService.register(user);
request.setAttribute("msg", "注册成功,请登录");
request.getRequestDispatcher("/user_login.jsp").forward(request, response); }

注:如果User和表单之间存在名称不相同的属性,则BeanUtils不对这些属性进行处理。

Commons BeanUtils工具包的更多相关文章

  1. 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

      本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...

  2. 32_使用BeanUtils工具包操作JavaBean

      由于对属性设置值和得到值的需求很多,使用频率很高,所以有一些开源勇士 不满足于JavaBean API 中IntroSpector来操作bean, 写出来了通用的BeanUtils工具,来进一步简 ...

  3. JavaWeb -- 内省—beanutils工具包 的使用

    Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写. Beanu ...

  4. java 内省综合案例和Beanutils工具包

    演示用eclipse自动生成 ReflectPoint类的setter和getter方法. 直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,先用 ...

  5. Apache Commons BeanUtils

    http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanut ...

  6. myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入

    com.sun.org.apache.commons.beanutils.BeanUtils这个包不能引入了怎么办自己下了个org.apache.commons的jar包了之后,改成import or ...

  7. 关闭log4j 输出 DEBUG org.apache.commons.beanutils.*

    2016-03-23 10:52:26,860 DEBUG org.apache.commons.beanutils.MethodUtils - Matching name=getEPort on c ...

  8. Apache Commons Beanutils对象属性批量复制(pseudo-singleton)

    Apache Commons Beanutils为开源软件,可在Apache官网http://commons.apache.org/proper/commons-beanutils/download_ ...

  9. Commons Beanutils使用setProperty() - 就是爱Java

    有时不能只依靠getter/setter操作bean,如:需要名字动态取得的,或是访问bean内的field,甚至是集合或数组内bean的field,利用反射机制对bean的field进行处理,这时候 ...

随机推荐

  1. Keras+Yolo 目标检测

    参考:https://www.cnblogs.com/tensorflownews/p/8922359.html Github:https://github.com/qqwweee/keras-yol ...

  2. Java笔记 - Socket编程

    两个Java应用程序可以通过一个双向的网络通讯连接实现数据交换,这个双向链路的一端称为一个Socket.java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向链路的c ...

  3. 夏令营501-511NOIP训练18——高三楼

    传送门:QAQQAQ 题意:定义矩阵A与矩阵B重复,当且仅当A可以通过任意次行列交换得到B,例如下图A,B即为合法矩阵 现求对于$n*n$的矩阵有多少个不重复的矩阵 数据范围: 对于10%的数据 N≤ ...

  4. 新增加的html里的标签元素,该元素作为事件,js获取不到id的问题

    if(flag==0){                var p = document.createElement("p");                  var text ...

  5. 第二十一篇:spring怎么做缓存

     项目背景:你可能遇情景:1.一个做统计的页面,每次刷新需要调接口做查询 ,是联表查询,查出来的数据还需要做一些计算或者加工,不算页面上的图表插件,刷新一次,延迟个几秒钟才出的来2. 一个统计接口如此 ...

  6. 浅谈web应用的高可用

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安全 ...

  7. PCA降维2

    前言 本文为模式识别系列第一篇,主要介绍主成分分析算法(Principal Component Analysis,PCA)的理论,并附上相关代码.全文主要分六个部分展开: 1)简单示例.通过简单的例子 ...

  8. Entity Framework Code First 模式-建立一对多联系

    一.建立一对多联系 使用的例子为Product与Category,一个种类(Product)对应多个商品(Product) 1.外键列名默认约定 在“一”这边的实体增加一个集合属性(public vi ...

  9. art-template官方文档

    http://aui.github.io/art-template/zh-cn/docs/

  10. AM运行中的垃圾数据清理

    1.下载 filetmpclear.bat 2.打开 这个批处理文件,修改参数 3.按下图 第一个红色框内, 地址: 可以在  AM8服务管理器- 文件服务 ,数据路径后再加  \__Temp__ 第 ...