![JAR search and dependency download from the Maven repository](/logo.png)
com.geese.plugin.excel.util.BeanPropertyUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of easy-excel Show documentation
Show all versions of easy-excel Show documentation
像SQL一样操作Excel,简化Excel的读写操作
The newest version!
package com.geese.plugin.excel.util;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Bean属性操作工具
* 主要提供:bean之间的属性复制,map to bean的转换,bean to map的转换
*
* @author zhangguangyong [email protected]
* @date 2016/11/16 16:28
* @sine 0.0.1
*/
public class BeanPropertyUtils {
private static SimpleDateFormat sdf = new SimpleDateFormat();
/**
* null -> ""
*
* @param bean
*/
public static void nullToEmpty(Object bean) {
List fields = getDeclaredFields(bean.getClass(), true);
for (Field field : fields) {
try {
field.setAccessible(true);
Class fieldType = field.getType();
if (String.class == fieldType) {
Object val = field.get(bean);
if (null == val) {
field.set(bean, "");
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
/**
* Map转换为Bean
*
* @param map
* @param bean
* @return
*/
public static Object mapToBean(Map map, Object bean) {
List fields = getDeclaredFields(bean.getClass(), true);
Map fieldNameMap = new HashMap<>();
for (Field field : fields) {
fieldNameMap.put(field.getName(), field);
}
Set keys = map.keySet();
for (Object key : keys) {
if (fieldNameMap.containsKey(key)) {
Field field = fieldNameMap.get(key);
field.setAccessible(true);
try {
setFieldValue(bean, field, map.get(key));
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
} finally {
field.setAccessible(false);
}
}
}
return bean;
}
/**
* 设置字段的值
*
* @param target 目标对象
* @param field 字段
* @param value 字段值
* @return 目标对象
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
private static Object setFieldValue(Object target, Field field, Object value) throws NoSuchFieldException, IllegalAccessException {
notNull(target);
notNull(field);
if (value == null) {
return target;
}
// 字段类型
field.setAccessible(true);
Class fieldType = field.getType();
// 值不是String类型,直接设置
if (String.class != value.getClass()) {
field.set(target, value);
return target;
}
// 值是String类型,可能存在多种情况
String valueString = value.toString().trim();
// 字段为String类型
if (String.class == fieldType) {
field.set(target, valueString);
return target;
}
// 字段为基本类型
if (int.class == fieldType || Integer.class == fieldType) {
field.set(target, Integer.valueOf(valueString));
return target;
}
if (long.class == fieldType || Long.class == fieldType) {
field.set(target, Long.valueOf(valueString));
return target;
}
if (double.class == fieldType || Double.class == fieldType) {
field.set(target, Double.valueOf(valueString));
return target;
}
if (float.class == fieldType || Float.class == fieldType) {
field.set(target, Float.valueOf(valueString));
return target;
}
if (short.class == fieldType || Short.class == fieldType) {
field.set(target, Short.valueOf(valueString));
return target;
}
if (byte.class == fieldType || Byte.class == fieldType) {
field.set(target, Short.valueOf(valueString));
return target;
}
if (Boolean.class == fieldType || boolean.class == fieldType) {
field.set(target, Boolean.valueOf(valueString));
return target;
}
// 字段为大数字类型
if (BigDecimal.class == fieldType) {
BigDecimal.valueOf(Double.valueOf(valueString));
return target;
}
if (BigInteger.class == fieldType) {
BigInteger.valueOf(Long.valueOf(valueString));
return target;
}
// 字段为日期类型
if (Date.class == fieldType) {
String dateString = valueString.replaceAll("[^\\d]+", "");
switch (dateString.length()) {
case 4:
sdf.applyPattern("yyyy");
break;
case 6:
sdf.applyPattern("yyyyMM");
break;
case 8:
sdf.applyPattern("yyyyMMdd");
break;
case 10:
sdf.applyPattern("yyyyMMddHH");
break;
case 12:
sdf.applyPattern("yyyyMMddHHmm");
break;
case 14:
sdf.applyPattern("yyyyMMddHHmmss");
break;
case 17:
sdf.applyPattern("yyyyMMddHHmmssSSS");
break;
default:
throw new IllegalArgumentException("不支持的日期格式:" + valueString);
}
try {
field.set(target, sdf.parse(dateString));
} catch (ParseException e) {
e.printStackTrace();
}
return target;
}
// 字段为枚举类型
if (fieldType.isEnum()) {
field.set(target, Enum.valueOf(fieldType, valueString));
return target;
}
throw new IllegalArgumentException("不支持的字段类型处理:" + fieldType);
}
/**
* 复制属性到一个Map
*
* @param bean 来源对象
* @return 目标Map
*/
public static Map beanToMap(Object bean) {
return beanToMap(bean, (List) null);
}
/**
* 复制属性到一个Map
*
* @param bean 来源对象
* @param includes 需要复制的属性
* @return 目标Map
*/
public static Map beanToMap(Object bean, List includes) {
return (Map) copy(bean, new HashMap(), includes, null);
}
/**
* 复制属性到一个Map
*
* @param bean 来源对象
* @param excludes 不需要复制的属性
* @return 目标Map
*/
public static Map beanToMap(Object bean, String... excludes) {
return (Map) copy(bean, new HashMap(), null, Arrays.asList(excludes));
}
/**
* 复制属性到一个Map
*
* @param beans 来源对象
* @return 目标Map
*/
public static List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy