Ogbect对象转换为泛型对象
相信很多人都自己写个这个转换的方法,再次附上我自己的写转换方法仅供参考。
T t = BeanUtil.dbObject2Bean(obj, tClass);
1 public static <T> T dbObject2Bean(DBObject dbObject, Class<T> clazz) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException, InstantiationException { 2 3 Object ot = Class.forName(clazz.getName()).newInstance(); 4 Method[] methods = clazz.getMethods(); 5 Field[] fields = clazz.getDeclaredFields(); 6 7 for (Field field : fields) { 8 String varName = field.getName(); 9 if("serialVersionUID".equals(varName) || "_id".equals(varName)){ 10 continue; 11 } 12 org.springframework.data.mongodb.core.mapping.Field annotation = field.getAnnotation(org.springframework.data.mongodb.core.mapping.Field.class); 13 String fieldName = annotation.value(); 14 Object object = dbObject.get(fieldName); 15 16 // 为对象赋值 17 for (int j = 0; j < methods.length; j++) { 18 String methodName = methods[j].getName(); 19 if (matchFieldAndSet(fieldName, methodName)) { 20 methods[j].invoke(ot, object); 21 break; 22 } 23 } 24 } 25 return (T) ot; 26 }
private static boolean matchFieldAndSet(String field, String name) {
if (name.toLowerCase().matches("set" + field.toLowerCase())) {
return true;
} else {
return false;
}
}
就这这样简单的代码:转换50000条数据,在自己电脑上转换的时候耗时:7s
下面换上apache的转换方法,耗时变成了2s。
其实强大的apache就写好了一个转换方法,看了半天,看得有点迷糊,有兴趣的同学可以自己去研究一下。代码如下:
用他写的代码,减少遍历,优化了转换时间。也可以看看我写的,有什么改进的可以相互学习。谢谢!!!
T t = BeanUtil.convert(obj, tClass);
public static <T> T convert(DBObject dbObject, Class<T> clazz) {
return (T) org.apache.commons.beanutils.ConvertUtils.convert(dbObject, clazz);
}
著作权归个人所有,麻烦同志们别乱复制粘贴发表。
为净化网络资源做贡献。谢谢!