只需一个就够(持久【一】)

来源:互联网 发布:php网站框架什么好 编辑:程序博客网 时间:2024/04/28 03:14

ResultSet

标准的JDBC关键类,通过Resulet可以获得jdbc运行的结果,它的结果不过可以组合成Key-Value形式,那就先把它转换成我们熟悉的Map再说;

 

public class RecordBuilder {public static List<Map<String, Object>> buildRecord(ResultSet rst) throws Exception {ResultSetMetaData rsmd = rst.getMetaData();List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();int len = rsmd.getColumnCount();while (rst.next()) {Map<String, Object> colValue = new HashMap<String, Object>();for (int i = 1; i <= len; i++) {colValue.put(rsmd.getColumnName(i).toLowerCase(), rst.getObject(rsmd.getColumnName(i)));}result.add(colValue);}return result;}public static List<Class<?>> buildRecordToModel(ResultSet rst, Class<?> model) throws Exception {List<Map<String, Object>> value = buildRecord(rst);List<Class<?>> rs = new LinkedList<Class<?>>();for (Map<String, Object> tmp : value) {rs.add((Class<?>) ModelBuilder.generatorRecord(tmp, model));}return rs;}}

 

 

Class<?> 

Map转换为Bean, 很多大牛都是利用反射来实现的,虽说牺牲了一点性能,不过相比那些get,set感觉要爽多啦



 

public class ModelBuilder {protected static final Logger log = Logger.getLogger(ModelBuilder.class);public static BaseModel generatorModel(Class<?> obj, HttpServletRequest request) throws Exception {Map<String, String[]> requestMap = request.getParameterMap();BaseModel real = (BaseModel) obj.newInstance();for (Entry<String, String[]> e : requestMap.entrySet()) {String paraKey = e.getKey();Object value = e.getValue()[0] != null ? e.getValue()[0] : "";real.set(paraKey, value);}log.info(real.getFieldDetail().toString());return real;}public static Object generatorRecord(Map<String, Object> value, Class<?> obj) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {Field[] srcFields = obj.getDeclaredFields();Object objClass = obj.newInstance();Set<String> fields = value.keySet();for (Field tmp : srcFields) {if (fields.contains(tmp.getName().toLowerCase())) {tmp.setAccessible(true);tmp.set(objClass, value.get(tmp.getName().toLowerCase()));}}return objClass;}}



0 0
原创粉丝点击