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);
}
注意事项:
- 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);
}
- 设置好匹配格式
- 必须在填充数据之前绑定
四. 扩展使用:自定义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>
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); |
---|
请给努力中的自己点个赞哦!
每天进步一点点`~~~~~
来源:oschina
链接:https://my.oschina.net/ithuang/blog/3217083