packagecom.akb.hfcx.csp.common.util;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.HashMap;importjava.util.Locale;importjava.util.Map;public classSuperBeanUtils {/*** 取Bean的属性和值对应关系的MAP
*
*@parambean
*@returnMap*/
public static MapgetFieldValueMap(Object bean) {
Class> cls =bean.getClass();
Map valueMap = new HashMap();
Method[] methods=cls.getDeclaredMethods();
Field[] fields=cls.getDeclaredFields();for(Field field : fields) {try{
String fieldType=field.getType().getSimpleName();
String fieldGetName=parGetName(field.getName());if (!checkGetMet(methods, fieldGetName)) {continue;
}
Method fieldGetMet= cls.getMethod(fieldGetName, newClass[] {});
Object fieldVal= fieldGetMet.invoke(bean, newObject[] {});
String result= null;if ("Date".equals(fieldType)) {
result=fmtDate((Date) fieldVal);
}else{if (null !=fieldVal) {
result=String.valueOf(fieldVal);
}
}//String fieldKeyName = parKeyName(field.getName());
valueMap.put(field.getName(), result);
}catch(Exception e) {continue;
}
}returnvalueMap;
}/*** set属性的值到Bean
*
*@parambean
*@paramvalMap*/
public static void setFieldValue(Object bean, MapvalMap) {
Class> cls =bean.getClass();//取出bean里的所有方法
Method[] methods =cls.getDeclaredMethods();
Field[] fields=cls.getDeclaredFields();for(Field field : fields) {try{
String fieldSetName=parSetName(field.getName());if (!checkSetMet(methods, fieldSetName)) {continue;
}
Method fieldSetMet=cls.getMethod(fieldSetName,
field.getType());//String fieldKeyName = parKeyName(field.getName());
String fieldKeyName =field.getName();
String value=valMap.get(fieldKeyName);if (null != value && !"".equals(value)) {
String fieldType=field.getType().getSimpleName();if ("String".equals(fieldType)) {
fieldSetMet.invoke(bean, value);
}else if ("Date".equals(fieldType)) {
Date temp=parseDate(value);
fieldSetMet.invoke(bean, temp);
}else if ("Integer".equals(fieldType)|| "int".equals(fieldType)) {
Integer intval=Integer.parseInt(value);
fieldSetMet.invoke(bean, intval);
}else if ("Long".equalsIgnoreCase(fieldType)) {
Long temp=Long.parseLong(value);
fieldSetMet.invoke(bean, temp);
}else if ("Double".equalsIgnoreCase(fieldType)) {
Double temp=Double.parseDouble(value);
fieldSetMet.invoke(bean, temp);
}else if ("Boolean".equalsIgnoreCase(fieldType)) {
Boolean temp=Boolean.parseBoolean(value);
fieldSetMet.invoke(bean, temp);
}else{
System.out.println("not supper type" +fieldType);
}
}
}catch(Exception e) {continue;
}
}
}/*** 格式化string为Date
*
*@paramdatestr
*@returndate*/
public staticDate parseDate(String datestr) {if (null == datestr || "".equals(datestr)) {return null;
}try{
String fmtstr= null;if (datestr.indexOf(':') > 0) {
fmtstr= "yyyy-MM-dd HH:mm:ss";
}else{
fmtstr= "yyyy-MM-dd";
}
SimpleDateFormat sdf= newSimpleDateFormat(fmtstr, Locale.UK);returnsdf.parse(datestr);
}catch(Exception e) {return null;
}
}/*** 日期转化为String
*
*@paramdate
*@returndate string*/
public staticString fmtDate(Date date) {if (null ==date) {return null;
}try{
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
Locale.US);returnsdf.format(date);
}catch(Exception e) {return null;
}
}/*** 判断是否存在某属性的 set方法
*
*@parammethods
*@paramfieldSetMet
*@returnboolean*/
public static booleancheckSetMet(Method[] methods, String fieldSetMet) {for(Method met : methods) {if(fieldSetMet.equals(met.getName())) {return true;
}
}return false;
}/*** 判断是否存在某属性的 get方法
*
*@parammethods
*@paramfieldGetMet
*@returnboolean*/
public static booleancheckGetMet(Method[] methods, String fieldGetMet) {for(Method met : methods) {if(fieldGetMet.equals(met.getName())) {return true;
}
}return false;
}/*** 拼接某属性的 get方法
*
*@paramfieldName
*@returnString*/
public staticString parGetName(String fieldName) {if (null == fieldName || "".equals(fieldName)) {return null;
}int startIndex = 0;if (fieldName.charAt(0) == '_')
startIndex= 1;return "get"
+ fieldName.substring(startIndex, startIndex + 1).toUpperCase()+ fieldName.substring(startIndex + 1);
}/*** 拼接在某属性的 set方法
*
*@paramfieldName
*@returnString*/
public staticString parSetName(String fieldName) {if (null == fieldName || "".equals(fieldName)) {return null;
}int startIndex = 0;if (fieldName.charAt(0) == '_')
startIndex= 1;return "set"
+ fieldName.substring(startIndex, startIndex + 1).toUpperCase()+ fieldName.substring(startIndex + 1);
}/*** 获取存储的键名称(调用parGetName)
*
*@paramfieldName
*@return去掉开头的get*/
public staticString parKeyName(String fieldName) {
String fieldGetName=parGetName(fieldName);if (fieldGetName != null && fieldGetName.trim() != ""
&& fieldGetName.length() > 3) {return fieldGetName.substring(3);
}returnfieldGetName;
}
}