apache组织的commons

一 前言

上一文章自己写得JavaBean转Map,其实apache组织已经封装了好多功能包,其中就包含commons-beanutils

apache组织的commons项目下的常用组件:

commons-beanutils:提供了操作JavaBean的很多工具类.

commons-long3:提供了Java语言增强的很多工具类.

二 用法

复制 commons-beanutils-1.9.2.jar()到项目的lib文件下,addbuildPath

上面这个类还依赖commons-logging-1.2.jar 复制到项目的lib文件下,addbuildPath

package com.OSA.Day01.JavaBean_02;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;


//@Setter 	为所有字段生成set方法
//@Getter	为所有字段生成get方法
//@ToString 生成toString()方法

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person_02 {

	private Long id;
	private String firstName;
	private String lastName;
	private boolean man;

	
}
package com.OSA.Day01.JavaBean_02;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

public class BeanUtilText {

	/**
	 * @param args
	 * @throws Exception
	 * @throws IllegalAccessException
	 */
	public static void main(String[] args) throws IllegalAccessException,
			Exception {

		Person_02 p = new Person_02();

		Map<String, Object> mp = new HashMap<String, Object>();

		mp.put("id", "");
		mp.put("lastName", "xiaolin");
		mp.put("firstName", "zhang");
		mp.put("man", false);

		// 把一个Map/javaBean对象中的数据拷贝到另一个对象中
		BeanUtils.copyProperties(p, mp);

		System.out.println(p);

		// javaBean对象拷贝到javaBean对象
		Person_02 p2 = new Person_02();
		BeanUtils.copyProperties(p2, mp);

		System.out.println(p2);

		// 获取属性
		String value = BeanUtils.getProperty(p2, "firstName");
		System.out.println(value);

	}

}


打印结果

Person_02(id=0, firstName=zhang, lastName=xiaolin, man=false)
Person_02(id=0, firstName=zhang, lastName=xiaolin, man=false)
zhang

三 使用注意点

1 支持类型转换,如果在mp中设置id的值为字符串也会自动转换为真实的long类型

Map<String, Object> mp = new HashMap<String, Object>();

		mp.put("id", "123");
		mp.put("lastName", "xiaolin");
		mp.put("firstName", "zhang");
		mp.put("man", false);
		mp.put("fireDate", new java.util.Date());

2 如果javaBean对象中有对象类型的,不支持map中的字符串转换Data类型

public class Person_02 {

	private Long id;
	private String firstName;
	private String lastName;
	private boolean man;
	private java.util.Date fireDate;
	
}

赋值字符串过程会报错

Person_02 p = new Person_02();

		Map<String, Object> mp = new HashMap<String, Object>();

		mp.put("id", "123");
		mp.put("lastName", "xiaolin");
		mp.put("firstName", "zhang");
		mp.put("man", false);
		mp.put("fireDate", "2018/12/25");

		// 把一个Map/javaBean对象中的数据拷贝到另一个对象中
		BeanUtils.copyProperties(p, mp);


解决方法

		Person_02 p = new Person_02();

		Map<String, Object> mp = new HashMap<String, Object>();

		mp.put("id", "");
		mp.put("lastName", "xiaolin");
		mp.put("firstName", "zhang");
		mp.put("man", false);
		mp.put("fireDate", "2018/12/25");

		
		//创建转换 默认给值为null
		DateConverter dateConverter = new DateConverter(null);
		
		//设置支持的字符串格式
		dateConverter.setPatterns(new  String[]{"yyyy/MM/dd"});
		
		ConvertUtils.register(dateConverter, java.util.Date.class);
		
		
		//设置如果字符串传“”空字符串赋值为0,实际应该赋值为“”认为是null
		
		ConvertUtils.register(new LongConverter(null), Long.class);

		
		// 把一个Map/javaBean对象中的数据拷贝到另一个对象中
		BeanUtils.copyProperties(p, mp);

		System.out.println(p)


打印

Person_02(id=null, firstName=zhang, lastName=xiaolin, man=false, fireDate=Tue Dec 25 00:00:00 CST 2018)
Person_02(id=null, firstName=zhang, lastName=xiaolin, man=false, fireDate=Tue Dec 25 00:00:00 CST 2018)

四 其他jar包

同时commons-lang3-3.1.jar也增强了系统的lang包,用数组等工具类可以使用

猜你喜欢

转载自blog.csdn.net/yezichongchongling/article/details/79252783