BeanUtil工具类是apache commons中的项目

使用BeanUtil除了需要 commons-beanutils-1.8.3.jar 外,可能需要记录错误日志信息,再加入 commons-logging-1.1.3.jar(也是apache的) 即可

下面着重看一些例子

// 实体类User Point,这里就省去get,set方法

package com.yangwei.model;

import java.util.Date;

public class User {

    private String name;
    private int age;
    private Date birth;
    private Point point;
}
public class Point {

    private int x;
    private int y;
}
package com.yangwei.test;

import static org.junit.Assert.fail;

import java.lang.reflect.InvocationTargetException;

import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

import com.yangwei.model.User;

public class TestBeanUtil {

    @Test
    public void test01() {

        try {
            User u=new User();
            //假设要为name设置值"zhangsan"
            String key="name";
            String value="zhangsan";
            //以前我们使用Method 调用它的invoke方法完成操作
            //现在我们使用BeanUtils的copyProperty完成设值操作
            BeanUtils.copyProperty(u, key, value);
            System.out.println(u.getName());//zhangsan

            //拷贝不认识的属性,也不会报错
            BeanUtils.copyProperty(u, "yyy", value);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

}
两个转换器类 ,实现Converter接口

package com.yangwei.model;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

public class DateConverter implements Converter{

    /**
     * 第一个参数表示要转换的类型, 第二个参数表示要转换的值
     * 比如要拷贝一个字符串到日期中,第一个参数就是日期,第二个参数是字符串值
     */
    SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
    @Override
    public Object convert(Class clz, Object obj) {
        if(clz!=Date.class){
            return null;
        }
        try {
            if(obj instanceof String){
                return f.parse((String) obj);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }

}
package com.yangwei.model;

import org.apache.commons.beanutils.Converter;

public class PointConverter implements Converter {

    /**
     * 将传递过来的值转为Point类
     */
    @Override
    public Object convert(Class clz, Object obj) {

        if(clz!=Point.class){
            return null;
        }
        if(obj instanceof String){
            String value=(String)obj;
            String strArr[]=value.split(",");
            if(strArr!=null && strArr.length==2){
                Point point=new Point();
                point.setX(Integer.parseInt(strArr[0]));
                point.setY(Integer.parseInt(strArr[1]));
                return point;
            }
        }
        return null;
    }

}
package com.yangwei.test;

import java.lang.reflect.InvocationTargetException;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.junit.Test;

import com.yangwei.model.DateConverter;
import com.yangwei.model.Point;
import com.yangwei.model.PointConverter;
import com.yangwei.model.User;

public class TestBeanUtil {

    @Test
    public void test01() {

        try {
            User u=new User();
            //假设要为name设置值"zhangsan"
            String key="name";
            String value="zhangsan";
            //以前我们使用Method 调用它的invoke方法完成操作
            //现在我们使用BeanUtils的copyProperty完成设值操作
            BeanUtils.copyProperty(u, key, value);
            System.out.println(u.getName());//zhangsan

            //拷贝不认识的属性,也不会报错
            BeanUtils.copyProperty(u, "yyy", value);
            /**
             * 完整拷贝一个对象,此时会有错误,因为它不知道将Date转为何种类型
             * 日期是有很多中格式情况的,如 1977-10-10 1977/10/10等
             * 此时,如何处理呢???
             * 需要定义转换器  定义转换器的步骤:
             * 1, 创建一个类,实现Converter接口
             * 2,重写convert方法,实现转换
             * 3,在拷贝属性之前,注册转换器
            */
            ConvertUtils.register(new DateConverter(), Date.class);
            BeanUtils.copyProperty(u, "birth", "1988-11-20");
            ConvertUtils.register(new PointConverter(), Point.class);
            BeanUtils.copyProperty(u, "point", "12,23");

            User u2=new User();
            BeanUtils.copyProperties(u2, u);

            System.out.println(u.getName()+u.getBirth()+u.getPoint());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

}

apache-beanutil工具类的使用的更多相关文章

  1. Apache Commons 工具类介绍及简单使用

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  2. linkin大话数据结构--apache commons工具类

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...

  3. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  4. BeanUtil工具类的使用

    BeanUtils的使用 1.commons-beanutils的介绍 commons-beanutils是Apache组织下的一个基础的开源库,它提供了对Java反射和内省的API的包装,依赖内省, ...

  5. Apache Commons 工具类介绍及简单使用(转载)

    原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...

  6. Java:Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...

  7. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)

    JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <%  Java代码  %>  相当于写在service方法中. <%=java 变量或者表达式 %> ...

  8. apache StringUtils 工具类

    // org.apache.commons.lang3.StringUtils // 1.IsEmpty/IsBlank - checks if a String contains text 检查是否 ...

  9. apache ArrayUtils 工具类

    org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...

  10. 03-封装BeanUtil工具类(javabean转map和map转javabean对象)

    package com.oa.test; import java.beans.BeanInfo; import java.beans.IntrospectionException; import ja ...

随机推荐

  1. 7.31.2 this关键字

    this用在所有方法中:    用来区分局部变量和成员变量的名字二义性! 如:在set方法中这样写:name = name; 则java会遵循"谁近谁优先"的规则,会给局部变量赋值 ...

  2. python-opencv在有噪音的情况下提取图像的轮廓

    对于一般的图像提取轮廓,这篇博文介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加 ...

  3. 2015苏州大学ACM-ICPC集训队选拔赛(3)题解

    第三次校赛链接:快戳我 1001 考虑前半组数,我们只需要标记每个数出现的次数,再加上这个数之前的数出现的次数,即为这个数在m次操作中总共需要翻转的次数(即求前缀和),再根据翻转的奇偶性判断最后这个位 ...

  4. java se之File类

    遍历某个目录路径下的所有文件并打印输出: package com.led.file; import java.io.File; public class File_List { public stat ...

  5. 题目1522:包含min函数的栈

    #include <iostream> #include <cstdio> #include <stack> using namespace std; int ma ...

  6. 基于.netstandard的权限控制组件

    基于.netstandard的权限控制组件 Intro 由于项目需要,需要在 基于 Asp.net mvc 的 Web 项目框架中做权限的控制,于是才有了这个权限控制组件. 项目基于 .NETStan ...

  7. if 分支语句

    写在<script></script>里面. if(判断条件){满足条件时要执行的语句} else{不满足条件时要执行的语句} 三元运算:var x = 判断条件?值1:值2: ...

  8. 【BUG】插入或者更新超过限制后写入数据库失败

      Error Code: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your ...

  9. MySQL存储引擎中的MyISAM和InnoDB区别

    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...

  10. 学会数据库读写分离、分表分库——用Mycat,这一篇就够了!

    系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...