学习Apache commons-beanutils工具类

1、前言

初学java时,使用过beanUtils封装javaben参数,使用框架之后,由框架自动封装。慢慢淡忘了这个工具类,今天来学习学习!

2、导入依赖

 <dependency>
     <groupId>commons-beanutils</groupId>
     <artifactId>commons-beanutils</artifactId>
     <version>1.9.3</version>
 </dependency>

该依赖包含了:

3、小试牛刀

          @Test
	  public void test01() throws Exception {
		Student stu1 = new Student();
		Student stu2 = new Student();
		stu2.setNo("TEST001");
		stu2.setName("Jack Chen");
		
		//复制属性
		System.out.println(stu1);
		System.out.println("------------------------");
		BeanUtils.copyProperties(stu1, stu2);
		System.out.println(stu1);
		
                //设置属性的值
		BeanUtils.copyProperty(stu1, "major", "机械设计");
		System.out.println("------------------------");
		System.out.println(stu1);
		
                //将javaBean转化成Map
		Map<String, String> describe = BeanUtils.describe(stu1);
		System.out.println("------------------------");
		for (Map.Entry<String, String> entry : describe.entrySet()) {
			System.out.println("K:"+entry.getKey()+"--V:"+entry.getValue());
		}
		
                //将Map转化成javaBean
		Map<String , String> map = new HashMap<>();
		map.put("no", "TEST002");
		map.put("name", "Blueth Li");
		map.put("major", "Kong Fu");
		Student stu3 = new Student();
		BeanUtils.populate(stu3, map);
		System.out.println("------------------------");
		System.out.println(stu3);
	}

4、结果

5、后记

该工具类中除了BeanUtis方法之外,还有PropertiesUtils、ConvertUtis等。我比较关心BeanUtils这个方法,大笑

spring框架中也有自带的BeanUtils,使用方法和改工具类类型,注意参数的顺序。

6、注意事项

使用beanUtils复制对象的时候,需要注意的是:该工具类复制的时候,如果值为null,那么复制到目标对象中只会被初始化。

Integer、BigDecimal会被处理成0,Date会报错,Boolean出处理成false等。不过,该工具类也提供了相应的处理办法:

ConvertUtils.register(new DateConverter(null), java.util.Date.class);  
ConvertUtils.register(new BigDecimalConverter(null), java.math.BigDecimal.class);  
ConvertUtils.register(new IntegerConverter(null), java.lang.Integer.class);  
ConvertUtils.register(new BooleanConverter(null), java.lang.Boolean.class); 
注意处理数据就不会被初始化了。具体可以看源码的converters包

猜你喜欢

转载自blog.csdn.net/static_coder/article/details/80476062