BeanUtils类详解:如-将一个类中的属性赋值给另一个类

什么是BeanUtils工具

BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。

BeanUtils工具一般可以方便javaBean的哪些操作?

1)beanUtils可以便于对javaBean的属性进行赋值。

2)beanUtils可以便于对javaBean的对象进行赋值。

3)beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

BeanUtils的使用

使用beanUtils按照以下步骤~

前提:约定前提:参数名称需要和javabean的属性名称保持一致!!!!

步骤一

导包:导入commons-beanutils-1.8.3包

与commons-logging-1.1.3包

步骤二

写代码使用~下面就来演示下常见的用法

设置javaBean的参数

@Test
    public void test1() throws Exception
    {
        //先演示一下不用工具时的做法
        //1.生成对象
        Student s = new Student();
        
        /*2.通过set方法赋值
        s.setId(1);
        s.setName("VN");
        s.setAge(19);
        s.setClassID(5);
        s.setBirthday(new Date());
        用以上这种方法来给对象的属性赋值实在是太麻烦了,下面我们用BeanUtils来进行赋值
        */
        
        //1.得到javaBean的一个字节码对象
        Class clazz = Class.forName("com.vmaxtam.beanutiltest.Student");
        
        //2.生成该字节码的一个对象
        Object obj = clazz.newInstance();
        
        //4.注册一个日期格式转换器
        ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
        
        //3.使用工具对该对象进行赋值
        //注意: 对于基本数据类型,beanutils工具进行自动类型转换。把String自动转成Integer,Double,Float
        BeanUtils.setProperty(obj, "id", "1");
        BeanUtils.setProperty(obj, "name", "VN");
        BeanUtils.setProperty(obj, "age", "19");
        BeanUtils.setProperty(obj, "classID", "5");
        //如果要使用特殊的日期类型,则String->Date 不能自动转换,这时候就要注册一个转换器
        BeanUtils.setProperty(obj, "birthday", "1996-06-06");
        
        System.out.println(obj);        
    }

对比一下,我们发现,使用BeanUtils里赋值好像更麻烦。。。但这只是在这段代码中而已,运用BeanUtils上面代码的这个功能,

我们可以写出一个通用的方法,可以把请求中的参数拷贝到javaBean对象中!

约定前提: 请求中的参数名称 需要和javabean的属性名称保持一致!!!!
public static <T>T requestToBean(HttpServletRequest request , Class<T> clazz)
    {
        //创建javaBean对象    
        Object obj=null;
        try {
            obj=clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        
        //得到请求中的每个参数
        Enumeration<String> enu = request.getParameterNames();
        while(enu.hasMoreElements())
        {
            //获得参数名
            String name = enu.nextElement();
            //获得参数值
            String value = request.getParameter(name);
            //然后把参数拷贝到javaBean对象中
            try {
                BeanUtils.setProperty(obj, name, value);
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        return (T)obj;
    }

上面这个方法是一个泛型方法,传不同的javaBean进去都可以从request中获取参数值。在一个工程较大的项目中,如果使用这个通用的方法,就能节省很多代码。

把一个javaBean的属性拷贝到另一个javaBean对象中

@Test
    public void test2() throws Exception
    {
        //1.生成对象
        Student s1 = new Student();
        Student s2 = new Student();
        
        //2.通过set方法赋值
        s1.setId(1);
        s1.setName("VN");
        //s1.setAge(19);//基本数据类型可以为null,null也能拷贝
        s1.setClassID(5);
        s1.setBirthday(new Date());//特殊类型不能为null
 
        //需求:把s1的属性值拷贝到S2中,注意参数的顺序
        BeanUtils.copyProperties(s2, s1);
        
        System.out.println(s1);
        System.out.println(s2);    
    }

一句代码就完成拷贝了,不用像以前那样先用get()方法把s1的属性值拿出来,再用set()方法供给s2属性赋值

把一个map集合中的数据拷贝到javaBean中

@Test
    public void test3() throws Exception
    {
        //1.生成对象
        Map<String,Object> map = new HashMap<String,Object>();
    
        //2.给一些参数
        map.put("id", 2);
        map.put("name", "EZ");
        map.put("age", 22);
        map.put("classID", 3);
        map.put("birthday", new Date());
        
        //需求:把map的属性值拷贝到S中
        Student s = new Student();
        BeanUtils.copyProperties(s, map);
        
        System.out.println(s);
    }

---------------以上这个也是利用copProperties()实现属性赋值

版权声明:
作者:黯然gg
链接:https://3zi.cn/archives/118
来源:阿龙爱吃肉
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>