zoukankan      html  css  js  c++  java
  • Commons BeanUtils工具包

    1、简介

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

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

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

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

    2、BeanUtils工具对JavaBean类的操作

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

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

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

    3、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的属性的值

    4、BeanUtils的使用

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

     1 public class User {
     2 
     3     private int id;
     4     private String username;
     5     private String email;
     6     private String password;
     7     private String name;
     8     private String phone;
     9     private String address;
    10 
    11     public User() {
    12         super();
    13     }
    14 
    15     public User(String username, String email, String password, String name, String phone, String address) {
    16         super();
    17         this.username = username;
    18         this.email = email;
    19         this.password = password;
    20         this.name = name;
    21         this.phone = phone;
    22         this.address = address;
    23     }
    24 
    25     public int getId() {
    26         return id;
    27     }
    28 
    29     public void setId(int id) {
    30         this.id = id;
    31     }
    32 
    33     public String getUsername() {
    34         return username;
    35     }
    36 
    37     public void setUsername(String username) {
    38         this.username = username;
    39     }
    40 
    41     public String getEmail() {
    42         return email;
    43     }
    44 
    45     public void setEmail(String email) {
    46         this.email = email;
    47     }
    48 
    49     public String getPassword() {
    50         return password;
    51     }
    52 
    53     public void setPassword(String password) {
    54         this.password = password;
    55     }
    56 
    57     public String getName() {
    58         return name;
    59     }
    60 
    61     public void setName(String name) {
    62         this.name = name;
    63     }
    64 
    65     public String getPhone() {
    66         return phone;
    67     }
    68 
    69     public void setPhone(String phone) {
    70         this.phone = phone;
    71     }
    72 
    73     public String getAddress() {
    74         return address;
    75     }
    76 
    77     public void setAddress(String address) {
    78         this.address = address;
    79     }
    80 
    81     @Override
    82     public String toString() {
    83         return "User [id=" + id + ", username=" + username + ", email=" + email + ", password=" + password + ", name="
    84                 + name + ", phone=" + phone + ", address=" + address + "]";
    85     }
    86 
    87 }
    JavaBean Code

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

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

     1         <form action="${pageContext.request.contextPath }/user_register"
     2             method="post">
     3             <div class="register-top-grid">
     4                 <h3>注册新用户</h3>
     5                 <div class="input">
     6                     <span>用户名 <label style="color: red;">*</label></span> 
     7                     <input type="text" name="username" placeholder="请输入用户名" required="required">
     8                 </div>
     9                 <div class="input">
    10                     <span>邮箱 <label style="color: red;">*</label></span> 
    11                     <input type="text" name="email" placeholder="请输入邮箱" required="required">
    12                 </div>
    13                 <div class="input">
    14                     <span>密码 <label style="color: red;">*</label></span> 
    15                     <input type="text" name="password" placeholder="请输入密码" required="required">
    16                 </div>
    17                 <div class="input">
    18                     <span>收货人<label></label></span> 
    19                     <input type="text" name="name" placeholder="请输入收货">
    20                 </div>
    21                 <div class="input">
    22                     <span>收货电话<label></label></span> 
    23                     <input type="text" name="phone" placeholder="请输入收货电话">
    24                 </div>
    25                 <div class="input">
    26                     <span>收货地址<label></label></span> 
    27                     <input type="text" name="address" placeholder="请输入收货地址">
    28                 </div>
    29                 <div class="clearfix"></div>
    30             </div>
    31             <div class="register-but text-center">
    32                 <input type="submit" value="提交">
    33                 <div class="clearfix"></div>
    34             </div>
    35         </form>
    HTML Code

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

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

     1     protected void doPost(HttpServletRequest request, HttpServletResponse response)
     2             throws ServletException, IOException {
     3 
     4         // 构建User对象
     5         User user = new User();
     6         
     7         // 获取请求中表单提交的数据
     8         String username = request.getParameter("username");
     9         String email = request.getParameter("email");
    10         String password = request.getParameter("password");
    11         String name = request.getParameter("name");
    12         String phone = request.getParameter("phone");
    13         String address = request.getParameter("address");
    14         
    15         // 把获取到的数据赋值到user对象中
    16         user.setUsername(username);
    17         user.setEmail(email);
    18         user.setPassword(password);
    19         user.setName(name);
    20         user.setPhone(phone);
    21         user.setAddress(address);
    22         
    23         // 将user对象持久化到数据库中
    24         uService.register(username);
    25         request.setAttribute("msg", "注册成功,请登录");
    26         request.getRequestDispatcher("/user_login.jsp").forward(request, response);
    27     }

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

     1     protected void doPost(HttpServletRequest request, HttpServletResponse response)
     2             throws ServletException, IOException {
     3 
     4         // 构建User对象
     5         User user = new User();
     6         
     7         try {
     8             // 获取表单请求中的Map集合,将集合中的数据copy到user对象中;所提交请求中的请求参数和请求参数值的映射关系。
     9             BeanUtils.copyProperties(user, request.getParameterMap());
    10         } catch (IllegalAccessException e) {
    11             e.printStackTrace();
    12         } catch (InvocationTargetException e) {
    13             e.printStackTrace();
    14         }
    15         
    16         // 将user对象持久化到数据库中
    17         uService.register(user);
    18         request.setAttribute("msg", "注册成功,请登录");
    19         request.getRequestDispatcher("/user_login.jsp").forward(request, response);
    20 
    21     }

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

  • 相关阅读:
    C#中正则表达式的使用
    Asp.Net MVC 身份验证-Forms
    ASP.NET MVC:窗体身份验证及角色权限管理示例
    asp.net mvc forms身份认证
    ASP.NET MVC Form验证
    C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
    参考例子,学习Func<T, TResult>委托
    Razor 中的@helper 与 @function 用法
    @Helper辅助方法和@functions自定义函数
    ASP.NET MVC传递参数(model), 如何保持TempData的持久性
  • 原文地址:https://www.cnblogs.com/Dm920/p/11675898.html
Copyright © 2011-2022 走看看