Javaweb学习笔记之JDBC(九):用 BeanUtils 封装 JavaBean 对象

package com.demo.beanutils;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * BeanUtils 组件:
 *  程序中对 Javabean 的操作很频繁,所以 apache 提供了一套开源的 api,
 *  方便对 Javabean 的操作,即 BeanUtils 组件。
 *  BeanUtils 组件的作用是:简化 javabean 的操作;
 *
 *  使用 BeanUtils 组件导入的 jar 包:
 *      commons-beanutils-1.8.3.jar:BeanUtils 的核心包
 *      commons-logging-1.1.1.jar:BeanUtils 依赖包(必须有)
 *
 *  BeanUtils 基本 API:
 *      1、设置 JavaBean 对象的属性:下面两个方法作用一样
 *          BeanUtils.copyProperty(object, name, value);
 *          BeanUtils.setProperty(object, name, value);
 *      2、对象的拷贝
 *          BeanUtils.copyProperties(newObject, object);
 *      3、将 map 对象拷贝到 Javabean 对象中:map 中的 key 要与 Javabean 中的属性名一致
 *          BeanUtils.populate(object, map);
 */
public class Demo1 {
    /**
     * 使用 BeanUtils 组件对 Javabean 的基本操作
     */
    @Test
    public void test1() throws Exception{
        /*
         * 1、BeanUtils 实现对 Javabean 对象属性的设置
         *  对于基本数据类型,BeanUtils 会自动进行数据转换
         */
        Admin admin1 = new Admin();
        BeanUtils.copyProperty(admin1, "name", "张三");
        BeanUtils.copyProperty(admin1, "age", 18);
        System.out.println(admin1);

        Admin admin2 = new Admin();
        BeanUtils.setProperty(admin2, "name", "李四");
        BeanUtils.setProperty(admin2, "age", 22);
        System.out.println(admin2);

        System.out.println("---------------------------");

        /*
         * 2、对象的拷贝
         */
        Admin newAdmin = new Admin();
        BeanUtils.copyProperties(newAdmin, admin1);
        System.out.println(newAdmin);

        System.out.println("---------------------------");

        /*
         * 3、将 map 集合数据拷贝到 JavaBean 对象中
         */
        Admin adminMap = new Admin();
        Map<String, Object> map = new HashMap<>();
        map.put("name", "王五"); // 注意:map 中的 key 要与 javabean 中的属性名一致
        map.put("age", 33);
        BeanUtils.populate(adminMap, map);
        System.out.println(adminMap);
    }

    /**
     * BeanUtils 对 Javabean 中日期类型(Date)属性的设置
     *  方法一:自定义日期类型转换器
     */
    @Test
    public void test2() throws Exception{
        // 模拟表单提交的数据,表单提交的都是 字符串类型
        String name = "rose";
        String birth = "2019-01-01";    // 将此 字符串数据 转换成 Date 数据
//        String birth = null;          // 如果 字符串值为 null,或 空字符串,则不需要转换
//        String birth = "";

        // 创建对象
        Admin2 admin = new Admin2();

        // 注册日期类型转换器:重写 convert 方法
        ConvertUtils.register(new Converter() {
            // 转换的内部实现方法,重写
            // type:表示 javabean 中 birth 属性的数据类型(Date类型);
            // value:表示需要转换为 Date 类型的 字符串数据;
            @Override
            public Object convert(Class type, Object value) {
                // 如果 javabean 中 birth 的数据类型不是 Date,则不需要转换
                if (type != Date.class){
                    return null;
                }

                // 如果传入的 字符串值为 null,或者为 空字符串,也不需要转换
                if (value == null || "".equals(value.toString().trim())){
                    return null;
                }

                try {
                    // 字符串转换成日期
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    return sdf.parse(value.toString());
                }catch (Exception e){
                    throw new RuntimeException(e);
                }
            }
        }, Date.class);

        // 把表单提交的数据,封装到 javabean 对象中
        BeanUtils.setProperty(admin, "name", name);
        BeanUtils.setProperty(admin, "birth", birth);

        System.out.println(admin);
    }

    /**
     * BeanUtils 对 Javabean 中日期类型(Date)属性的设置
     *  方法二:使用 BeanUtils 提供的日期类型转换器工具类
     */
    @Test
    public void test3() throws Exception{
        // 模拟表单提交的数据,表单提交的都是 字符串类型
        String name = "lucy";
        String birth = "2000-11-11";
//        String birth = null;  // 不进行转换,也不会报错
//        String birth = "";      // 会报异常

        // 创建对象
        Admin2 admin = new Admin2();

        // 注册日期类型转换器:使用组件提供的转换器工具类
        // 注意:DateLocaleConverter 工具类只判断了 null,没有判断 空字符串;
        // 也就是说如果 String birth = null; 不会进行转换,也不会报异常;但是如果 String birth = ""; 就会报异常;
        ConvertUtils.register(new DateLocaleConverter(), Date.class);

        // 把表单提交的数据,封装到 javabean 对象中
        BeanUtils.setProperty(admin, "name", name);
        BeanUtils.setProperty(admin, "birth", birth);

        System.out.println(admin);
    }
}

其中 Admin.java:

package com.demo.beanutils;

public class Admin {
    private String name;
    private int age;

    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;
    }

    @Override
    public String toString() {
        return "Admin{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

其中 Admin2.java:

package com.demo.beanutils;

import java.util.Date;

public class Admin2 {
    private String name;
    private Date birth;

    public String getName() {
        return name;
    }

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

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    @Override
    public String toString() {
        return "Admin2{" +
                "name='" + name + '\'' +
                ", birth=" + birth +
                '}';
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值