本篇内容介绍了“怎么利用Java反射技术将面向对象编程和SQL操作联系起来”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
实例代码:
public class SqlUtil extends BaseApplogic { public List excuteQuery(String sql, Object[] paras, Object voo) throws AppException { DBPersistenceManager dbpm = this.getFnmsDBPM(); List list=new ArrayList(); try { DataSet ds = (DataSet) dbpm.executeQuery(sql, paras); DataSetMetaData dsmd = ds.getDataSetMetaData(); Field[] fd = voo.getClass().getDeclaredFields(); String className = voo.getClass().getName(); int size = fd.length; Method md[]=new Method[size]; //构造method[] for (int i = 0; i < size; i++) { Attribute attr=dsmd.getAttribute(fd[i].getName().toUpperCase()); if (null != attr) { Field f = voo.getClass().getDeclaredField(fd[i].getName()); String type = f.getType().getName(); Class[] types=getTypes(type); String methodName=getSetterName(fd[i].getName()); md[i] = voo.getClass().getMethod( methodName,types); } } while(ds.next()){ Object o = Class.forName(className).newInstance(); for (int i = 0; i < size; i++) { if(null!=md[i]){ //调用 Attribute attr=dsmd.getAttribute(fd[i].getName().toUpperCase()); if (null==attr) continue; Object[] pa=new Object[]{ds.getString(attr.getAttrName())}; md[i].invoke(o,pa); } } list.add(o); } } catch (DrmException drme) { this.handleException(drme); } catch (Exception e) { this.handleException(e);// 新增加的异常处理 } finally { if (dbpm != null) { dbpm.close(); } } return list; } //由属性调用set方法 public static String getSetterName(String propName) { return "set" + propName.substring(0, 1).toUpperCase() + propName.substring(1, propName.length()); } // 取类型 public static Class[] getTypes(String type) { if (type.equals("java.lang.String")) { return new Class[] { String.class }; } else if (type.equals("int")) { return new Class[] { Integer.TYPE }; } else if (type.equals("long")) { return new Class[] { Long.TYPE }; } else if (type.equals("float")) { return new Class[] { Float.TYPE }; } else { System.out.println("no such type!"); return null; } } }
其中excuteQuery方法传入三个参数,第一个是要查询的sql语句,第二个是参数数组,第三个是要返回的对象类型。
返回值是一个list,list中的每个对象都是你传入的对象类型。
经过这样一种包装,将sql与对象自然的封装起来,不用每个查询都查出来以后,再resultset.next(),再getString(),然后再setXxx();
当然,这只是元数据与java对象反射技术利用的冰山一角。