BeanUtils的使用

BeanUtils简介

BeanUtils是Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作

JavaBean

满足以下三个条件,就可以说是一个JavaBean。JavaBean其实也就是一个类。

  1. 类必须使用public修饰。
  2. 提供无参数的构造器。
  3. 提供getter和setter方法访问属性。

了解:我们创建了JavaBean并实例化,一般情况是通过使用与属性相对应的getXxx,setXxx方法去访问这个对象的属性。但是在某些情况下,需要动态的访问这个Java对象的属性,我们可以使用反射来实现,但是使用反射操作较为复杂,而使用BeanUtils可以简化这一过程。

BeanUtils的基本使用

常用的操作及方法:

  1. 对JavaBean的属性进行赋值和取值。
//给指定对象bean的指定name属性赋值为指定值value。 如果指定的属性不存在,则什么也不发生。
public static void setProperty(Object bean, String name, Object value) 

//获取指定对象bean指定name属性的值。如果指定的属性不存在,则会抛出异常。 注意;当属性的类型是数组类型时,获取到的值数组中的第一个值。
public static String getProperty(Object bean, String name) 

  1. 将一个JavaBean所有属性赋值给另一个JavaBean对象中。
// 将对象orig的属性值赋值给对象dest对象对应的属性 注意:只有属性名名相同且类型一致的才会赋值成功。
public static void copyProperties(Object dest, Object orig)
  1. 将一个Map集合的数据封装到一个JavaBean对象中。
//将一个Map集合中的数据封装到指定对象bean中 注意:对象bean的属性名和Map集合中键要相同。
public static void populate(Object bean, Map<String, ? extends Object> properties) 

BeanUtils常用操作代码示例

1.导入相关Jar包

下载地址:http://commons.apache.org/
在这里插入图片描述
相关的jar包说明:

commons‐beanutils‐1.9.3.jar 工具核心包
commons‐logging‐1.1.1.jar 日志记录包
commons‐collections‐3.2.2.jar 增强的集合包

2.创建一个JavaBean类:Student

public class Student {
    private String name;
    private int age;
    private String sex;

	//默认有一个空参构造器
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

3.测试

对JavaBean的属性进行赋值和取值
  /*对JavaBean的属性进行赋值和取值。

    方法:
    public static void setProperty(Object bean, String name, Object value)
     给指定对象bean的指定name属性赋值为指定值value。 如果指定的属性不存在,则什么也不发生。
    public static String getProperty(Object bean, String name)
     获取指定对象bean指定name属性的值。如果指定的属性不存在,则会抛出异常。 注意;当属性的类型是数组类型时,获取到的值数组中的第一个值。
     */
    @Test
    public void BeanUtilsTest1() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
        //创建JavaBean对象(Student对象)
        Student student = new Student();
        //调用BeanUtils工具类的方法给对象属性赋值
        BeanUtils.setProperty(student,"name","张三");
        BeanUtils.setProperty(student,"age",18);
        BeanUtils.setProperty(student,"sex","男");

        System.out.println(student);

        //调用BeanUtils工具类的方法获取对象属性值
        String name = BeanUtils.getProperty(student, "name");
        String age = BeanUtils.getProperty(student, "age");
        String sex = BeanUtils.getProperty(student, "sex");


        System.out.println("姓名:"+ name);
        System.out.println("年龄:"+age);
        System.out.println("性别:"+ sex);
    }

测试运行:
在这里插入图片描述

将一个JavaBean所有属性赋值给另一个JavaBean对象中

分两种情况:

  1. 相同类型的对象(这里指属性名相同)之间属性赋值
 	/* 将一个JavaBean对象的属性赋值给另一个JavaBean对象
      方法:
      public static void copyProperties(Object dest, Object orig)
      将对象orig的属性值赋值给对象dest对象对应的属性 注意:只有属性名名相同且类型一致的才会赋值成功。
     */

    @Test//相同类型的对象之间属性赋值
    public void BeanUtilsTest2() throws InvocationTargetException, IllegalAccessException {

        //创建一个学生对象
        Student student1 = new Student();
        //调用BeanUtils工具类的方法给student1对象属性赋值
        BeanUtils.setProperty(student1,"name","张三");
        BeanUtils.setProperty(student1,"age",18);
        BeanUtils.setProperty(student1,"sex","男");
        System.out.println("student1="+student1);

        //再创建一个学生对象
        Student student2 = new Student();

        //调用BeanUtils工具类的方法将student1对象的属性值赋值给student2对象
        BeanUtils.copyProperties(student2,student1);
        System.out.println("student2="+student2);
    }

测试运行:
在这里插入图片描述

  1. 不同类型的对象(这里指属性名有差异)之间属性赋值:只有属性名相同的才会被赋值
    再创建一个JavaBean类用于测试:User
public class User {
    private String name;
    private int age;
    private String gender;
    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
    @Test//不同类型的对象之间属性赋值:只有属性名相同的才会被赋值
    public void BeanUtilsTest3() throws InvocationTargetException, IllegalAccessException {

        //创建一个Student对象
        Student student = new Student();
        //调用BeanUtils工具类的方法给student1对象属性赋值
        BeanUtils.setProperty(student,"name","张三");
        BeanUtils.setProperty(student,"age",18);
        BeanUtils.setProperty(student,"sex","男");
        System.out.println(student);

        //创建一个User对象
        User user = new User();

        //调用BeanUtils工具类的方法将student对象的属性值赋值给user对象
        BeanUtils.copyProperties(user,student);
        System.out.println(user);
    }

测试运行:
在这里插入图片描述

将一个Map集合的数据封装到一个JavaBean对象中
    /*将一个Map集合的数据封装到一个JavaBean对象中。
    方法:
    public static void populate(Object bean, Map<String, ? extends Object> properties)
    将一个Map集合中的数据封装到指定对象bean中 注意:对象bean的属性名和Map集合中键要相同。
     */
    @Test
    public void BeanUtilsTest4() throws InvocationTargetException, IllegalAccessException {
        //创建一个Student对象
        Student student = new Student();
        System.out.println("封装前:"+student);

        HashMap<String, Object> map = new HashMap<>();
        map.put("name","王五");
        map.put("age",20);
        map.put("sex","男");

        //调用BeanUtils工具类的方法将map数据封装到student中
        BeanUtils.populate(student,map);
        System.out.println("封装后:"+student);
    }

测试运行:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinking in Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值