<码农进阶> 利用反射封装Map成Vo

来源:互联网 发布:java 创建临时文件 编辑:程序博客网 时间:2024/05/17 22:32
package com.fw.utils;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.log4j.Logger;import com.fw.common.sql.SqlHandler;import com.ve.vo.UserVO;/** * 字段解析、组装容器 * @description  * @author zhanglm * @date   2014-4-28 */public class ParseUtils<T extends Object> {private static Logger log = Logger.getLogger(ParseUtils.class);/** * 将list中的map组装成list<vo> * @param list * @param t * @return */public  List<T> parseListToVo(List<Map<String,Object>> list,T t){List<T> lt = new ArrayList<T>();for(int i=0;i<list.size();i++){lt.add(parseMapToVo(list.get(i),t));}return lt;}/** * 通过反射机制将map中的key对应value注入到vo中 * @param map * @param t * @return * @throws Exception */public T parseMapToVo(Map<String,Object> map, T t){Object obj = null;try{Class<?> cl = t.getClass();obj = cl.newInstance();Field[] fields = cl.getDeclaredFields();Iterator<String> it = map.keySet().iterator();while (it.hasNext()) {String fieldName = it.next();for(Field f: fields){if(f.getName().equalsIgnoreCase(fieldName)){// 判断类型是否一致,调用反射注入值,String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);//System.out.println(methodName);Method inMethod = cl.getMethod(methodName, new Class[] { f.getType() });//System.out.println(f.getType().getName());;inMethod.invoke(obj, new Object[] { TypeConversionUtils.converType(TypeConversionUtils.getType(map.get(fieldName)), f.getType().getName(), map.get(fieldName)) });}}}}catch(Exception e){log.error("ParseUtils parseMapToVo error.");log.error(e.getMessage());}return (T) obj;}public static void main(String[] args)throws Exception {ParseUtils<UserVO> p = new ParseUtils<UserVO>();Map<String,Object> map = new HashMap<String, Object>();map.put("userid", 111);map.put("username", "shinyzo");map.put("password", "123456");UserVO vo = p.parseMapToVo(map, new UserVO());System.out.println(vo.getUserid());System.out.println(vo.getUsername());System.out.println(vo.getPassword());}}
 
 
package com.ve.vo;import java.util.Date;public class UserVO extends VO{/** *  */private static final long serialVersionUID = -6165143238125216769L;private String userid;private String username;private String password;private Date  operTime;private Float currCount;private Double price;private Boolean isrecomment;private Short isopen;private Integer page;public Date getOperTime() {return operTime;}public void setOperTime(Date operTime) {this.operTime = operTime;}public Float getCurrCount() {return currCount;}public void setCurrCount(Float currCount) {this.currCount = currCount;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public Boolean getIsrecomment() {return isrecomment;}public void setIsrecomment(Boolean isrecomment) {this.isrecomment = isrecomment;}public Short getIsopen() {return isopen;}public void setIsopen(Short isopen) {this.isopen = isopen;}public Integer getPage() {return page;}public void setPage(Integer page) {this.page = page;}public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

 

 

package com.fw.utils;import java.util.Date;/** * 类型转换工具类 * @description  * @author zhanglm * @date   2014-4-28 */public class TypeConversionUtils{/** 字符串  **/private static final String TYPE_STRING_FULL = "java.lang.String";private static final String TYPE_STRING = "String";/** 整型 **/private static final String TYPE_INT_FULL = "java.lang.Integer";private static final String TYPE_INT = "Int";/** 时间类型  **/private static final String TYPE_DATE = "java.util.Date";/** 浮点类型 **/private static final String Type_FLOAT_FULL = "java.lang.Float";private static final String Type_FLOAT = "float";/** 双精度 **/private static final String TYPE_DOUBLE_FULL = "java.lang.Double";private static final String TYPE_DOUBLE = "double";/** 短整型 **/private static final String TYPE_SHORT_FULL = "java.lang.Short";private static final String TYPE_SHORT = "short";/** 布尔类型  **/private static final String TYPE_BOOLEAN_FULL ="java.lang.Boolean";private static final String TYPE_BOOLEAN ="boolean";public static Object converType(String oldType,String newType,Object oldValue){// 字符串转整型if( (oldType.equals(TYPE_STRING) || oldType.equals(TYPE_STRING_FULL)) &&     (newType.equals(TYPE_INT) || newType.equals(TYPE_INT_FULL))){return (Integer) Integer.parseInt((String)oldValue);}// 整形转字符串if( (oldType.equals(TYPE_INT)||oldType.equals(TYPE_INT_FULL)) && (newType.equals(TYPE_STRING) || newType.equals(TYPE_STRING_FULL))){return String.valueOf(oldValue);}// 字符串格式时间转date类型时间return oldValue;}/** * 通过对象匹配类型 * @param obj * @return */public static String getType(Object obj){if(obj instanceof Integer){return TYPE_INT_FULL;}if(obj instanceof String){return TYPE_STRING_FULL;}if(obj instanceof Short){return TYPE_SHORT_FULL;}if(obj instanceof Float){return Type_FLOAT_FULL;}if(obj instanceof Double){return TYPE_DOUBLE_FULL;}if(obj instanceof Date){return TYPE_DATE;}return TYPE_STRING_FULL;}}


 


 

0 0
原创粉丝点击