<码农进阶> 利用反射封装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
- <码农进阶> 利用反射封装Map成Vo
- 利用java反射将map值封装到对象中
- 利用反射从 XML 构造 VO
- 利用fastjson和反射实现为VO属性赋值
- 利用Java反射快速封装JavaBean属性
- 利用反射,实现类的封装
- 利用object-c反射功能封装FMDB
- 利用object-c反射功能封装FMDB
- poi利用反射机制封装导出方法
- 利用反射模拟Struts2数据封装机制
- 利用反射封装数据查询操作
- 【Android】SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
- SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
- SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
- 分页封装VO
- spring mvc中,将json封装成vo
- hql语句显示列名,直接封装成VO
- hibernate 使用sql 查询利用setResultTransformer查询出封装好的VO对象
- iBeacons世界与移动互联网共进
- LocalBroadcastManager 使用详结
- PAT1014 BASIC:福尔摩斯的约会 (20)
- java上传文件到微信服务器
- localhost与127.0.0.1的区别
- <码农进阶> 利用反射封装Map成Vo
- 初识OPC
- 岁月静好,觅一处安暖
- mono-3.4.0安装时出现的问题 cannot stat `targets/Microsoft.Portable.Common.targets': No such file or direct
- ORA-28002: the password will expire within 7 days 解决方法(后面部分为拷贝,前面加上了自己遇到的问题的时候解决方案)
- 状态压缩DP 之 poj 2686
- CENTOS 6.4 编译安装APACHE PHP MYSQL ZEND【转载未测试】
- 酷派大神F1记事
- iOS是怎么"绘画"的?