java面向对象编程3(8) 之 BeanUtils工具类

半城伤御伤魂 提交于 2020-04-06 09:34:47

BeanUtils

一. 引言&概述&入门使用

BeanUtils可以让我们更方便快捷地 封装JavaBean数据。

例如可以用在带参构造,  Set方法 ,  反射。

 

入门使用:

导入jar包:

public static void main(String[] args) throws Exception {
    //使用BeanUtils工具为Phone对象填充数据
    //1、创建Phone对象
    Phone p = new Phone();
    //2、填充数据:setProperty(需要向哪个对象中填数据,给哪个成员变量填数据,要填的数据);
    BeanUtils.setProperty(p,"brand","华为");//p.setBrand("华为");
    BeanUtils.setProperty(p,"price",8000.0);
    BeanUtils.setProperty(p,"color","蓝色");
    //3、获取数据:getProperty(需要从哪个对象中获取数据,获取哪个成员变量的数据);
    System.out.println(BeanUtils.getProperty(p,"brand"));// p.getBrand();
}

注意:

 

 

 

二.​​​​​​​ 进阶使用:Map填充JavaBean【重点】

Map集合填充JavaBean。

Map<String,String[]> : 最频繁

Map<String,Object>

 

  • 填写简单数据:

Car类:

public class Car implements Serializable {
    private String name;
    private double price;
    //忽略其他方法
}

 

Demo类:

public static void main(String[] args) throws Exception {
    //Map填充JavaBean
    //1、创建Map集合,Map集合存储数据
    Map<String, String[]> map = new LinkedHashMap<>();
    //map  key必须和JavaBean的成员变量保持一致
    map.put("name",new String[]{"红旗"});
    map.put("price",new String[]{"400000"});
    //2、创建JavaBean对象
    Car car = new Car();
    //3、填充数据:populate(给哪个对象填充数据,map集合);
    BeanUtils.populate(car,map);
    System.out.println(car);
}

 

 

  • 填写复杂数据:数组

Car类

public class Car implements Serializable {
    private String name;
    private double price;
    private String[] doors;
    //忽略其他方法
}

 

Demo类:

public static void main(String[] args) throws Exception {
    //Map填充JavaBean
    //1、创建Map集合,Map集合存储数据
    Map<String, String[]> map = new LinkedHashMap<>();
    //map  key必须和JavaBean的成员变量保持一致
    map.put("name",new String[]{"红旗"});
    map.put("price",new String[]{"400000"});
    map.put("doors",new String[]{"驾驶室门","副驾门","后备箱门"});
    //2、创建JavaBean对象
    Car car = new Car();
    //3、填充数据:populate(给哪个对象填充数据,map集合);
    BeanUtils.populate(car,map);
    System.out.println(car);
}

 

 

注意事项:

 

  1. Map的key 必须和 成员变量的名称保持一致    (未一致,忽略对应的成员变量不填)

2、填充时若需要数据转换: String  可以转为   基本数据类型(整数、小数、布尔、字符)

3、成员变量是非数组类型,填写了多个值,只会取第一个

 

 

 

三.​​​​​​​ 高级使用:日期转换器【重点】

日期类:java.util.Date

Map :String =====>Date

强制转换:

 

解决方案:

Person类:

public class Person implements Serializable{
    private String name;
    private Date birthday;
    //其他方法忽略
}

 

Demo类:

public static void main(String[] args) throws Exception {
    //1、定义Map集合,保存数据
    LinkedHashMap<String, String[]> map = new LinkedHashMap<>();
    map.put("name",new String[]{"张三"});
    map.put("birthday",new String[]{"2001-10-01"});
    //2、创建Person对象
    Person p = new Person();

    //注册一个日期转换器,把java.util.Date和日期转换器绑定
    //1、创建日期转换器
    DateConverter dc = new DateConverter();
    //2、设置匹配格式
    dc.setPatterns(new String[]{"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss","yyyy/MM/dd"});
    //3、绑定:java.util.Date和日期转换器
    //register 注册/绑定
    ConvertUtils.register(dc,java.util.Date.class);
    //3、填充数据
    BeanUtils.populate(p,map);
    System.out.println(p);
}

 

  1. 设置好匹配格式
  2. 必须在填充数据之前绑定

 

 

 

四.​​​​​​​ 扩展使用:自定义MyBeanUtils

定义一个Java类MyBeanUtils

要求写一个方法:populate

  1、方法要求为静态方法,可通过类名直接调用。

  2、方法上定义泛型T。

  3、要求返回值类型为T类型

  4、方法参数:Class<T>对象

   Map<String,String[]>对象

  5、通过传入的Class对象,反射创建其JavaBean实例对象,并且将Map中的数据填充到JavaBean中。

 最后将填充好数据的JavaBean对象返回

 

代码实现:

/**
 *  填充数据方法
 * @param clazz     需要填充的JavaBean的类对象
 * @param map       保存着需要填充的数据
 * @param <T>       返回值类型
 * @return          返回填充好数据的JavaBean对象
 * @throws Exception    异常内部没处理,全部抛出
 */
public static <T> T populate(Class<T> clazz,Map<String,String[]> map) throws Exception {
    T t = null;
    //创建传入clazz的JavaBean对象
    t = clazz.newInstance();
    //填充数据(日期转换器)
    //绑定日期转换器
    DateConverter dc = new DateConverter();
    dc.setPatterns(new String[]{"yyyy-MM-dd"});
    ConvertUtils.register(dc,java.util.Date.class);
    //填充数据
    BeanUtils.populate(t,map);
    //返回JavaBean对象
    return t;
}

 

 

 

今日总结: :

BeanUtils:为了简化JavaBean数据封装

 

setProperty(对象,属性名”,”属性值);//

getProperty(对象,属性名”);

populate(对象,map);

 

Map<String,String[]>

Map<String,Object>

 

  1. JavaBean的成员变量的名称必须和Map的key保持一致  

2、String=====》Date   设置日期转换器

 

日期转换器设置:必须设置在填充之前

 

//1、创建日期转换器

DateConverter  dc = new DateConverter();

//2、设置匹配格式

dc.setPatterns(new String[]{“yyyy-MM-dd”});

//3、将日期转换器和java.util.Date进行绑定

ConvertUtils.register(dc,java.util.Date.class);

​​​​​​​

 

 

 

 

请给努力中的自己点个赞哦!

每天进步一点点`~~~~~

​​​​​​​

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!