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

BeanUtils

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

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

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

入门使用:

导入jar包:

35e7a27ec1eea8d6bf58f0b4d4209b16.png

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();

}

注意:

2a5bbb9d51df13451c4330d86c71a844.png

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

Map集合填充JavaBean。

Map :最频繁

Map

填写简单数据:

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

}

注意事项:

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

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

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

813626acad8acb0ea08e968cd2f14d2c.png

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

日期类:java.util.Date

Map:String =====>Date

强制转换:

c96a69a9547ebb4f6377a5e661bf8f4a.png

解决方案:

Person类:

public class Person implements Serializable{

private String name;

private Date birthday;

//其他方法忽略

}

Demo类:

public static void main(String[] args) throws Exception {

//1、定义Map集合,保存数据

LinkedHashMap 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);

}

设置好匹配格式

必须在填充数据之前绑定

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

定义一个Java类:MyBeanUtils

要求写一个方法:populate

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

2、方法上定义泛型T。

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

4、方法参数:Class对象

Map对象

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

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

代码实现:

/**

* 填充数据方法

* @param clazz 需要填充的JavaBean的类对象

* @param map 保存着需要填充的数据

* @param 返回值类型

* @return 返回填充好数据的JavaBean对象

* @throws Exception 异常内部没处理,全部抛出

*/

public static T populate(Class clazz,Map 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

Map

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); ​​​​​​​

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

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

​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值