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); /** * 解析sql中的參數,通過反射機制根據參數名注入對應的vo中的值放入list中 * @param sqlId * @param obj * @return */ public static List<Object> parseVoToList(String sql,Object obj) { List<Object> paramList = new ArrayList<Object>(); List<String> tempList = new ArrayList<String>(); // 匹配參數 "(空格多個)(任意字符)(空格多個)(= ?)" String regex = "(\\s*)(\\w*)(\\s*)(=\\s*\\?)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(sql); while(m.find()){ tempList.add(m.group(2)); } // 通過反射機制找到對應的參數內容放到 參數中 if(tempList.size()>0) { Class<?> c = obj.getClass(); java.lang.reflect.Field[] field = c.getDeclaredFields(); for (int i = 0; i < field.length; i++) { field[i].setAccessible(true); try { if(field[i].get(obj)!=null) { //System.out.println(field[i].getName()); //System.out.println(field[i].get(obj)); for(String paramname:tempList) { if(paramname.equalsIgnoreCase(field[i].getName().trim())) { paramList.add(field[i].get(obj)); } } } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return paramList; } /** * 解析sql中的參數,通過反射機制根據sql中的參數名注入對應的map中 * @param sqlId * @param vo * @return */ public static Map<String,Object> parseVoToMap(String sql,Object obj) { List<Object> paramList = new ArrayList<Object>(); // 找出參數名 String regex = "(\\s*)(\\w*)(\\s*)(=\\s*\\?)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(sql); Map<String,Object> map = new HashMap<String, Object>(); while(m.find()){ paramList.add(m.group(2)); map.put(m.group(2).trim().toLowerCase(), ""); } // 通過反射機制找到對應的參數內容放到 參數中 if(!map.isEmpty()) { Class<?> c = obj.getClass(); java.lang.reflect.Field[] field = c.getDeclaredFields(); for (int i = 0; i < field.length; i++) { field[i].setAccessible(true); try { if(field[i].get(obj)!=null) { //System.out.println(field[i].getName()); //System.out.println(field[i].get(obj)); if(map.containsKey(field[i].getName().trim().toLowerCase())) { map.put(field[i].getName().trim().toLowerCase(), field[i].get(obj)); } } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return map; } public static void main(String[] args)throws Exception { ParseUtils<UserVO> p = new ParseUtils<UserVO>(); //... } }