JSP底层方法的封装
之前在写JSP三层代码的时候,封装了一个BaseDao的工具类,包含executeQuery()方法、executeUpdate()方法。每个Dao层的方法都会把结果集进行再次的封装,为了减轻代码的冗余,就对这些方法进行的封装,并且根据模型直接返回一个结果集。
public <T> List<T> findModelListBySqlAndParam(String sql,List<Object> param,T t) { //定义一个集合来存放需要转成的对象集合 List<T> list=new ArrayList<T>(); //获取当前类 Class<?> c=t.getClass(); //遍历结果集,封装成外界用户所需要的对象集合 //1>获取结果集 ResultSet rs=executeQuery(sql, param); //2>开始遍历 try { while(rs.next()){ //初始化对象 T obj= (T)c.newInstance(); //获取当前类一共多少个属性啊 Field[] fields=c.getDeclaredFields(); for(Field f:fields){ //获取当前属性的属性名子 String fname=f.getName(); //获取当前的属性的类型(简称) java.lang.String String type=f.getType().getSimpleName(); //***************** 取出来当前属性对应的数据库的值了 **************** Object value=null; if(type.equalsIgnoreCase("string")){ value=rs.getString(fname); }else if(type.equalsIgnoreCase("int")){ value=rs.getInt(fname); }else if(type.equalsIgnoreCase("Integer")){ value=rs.getInt(fname); }else if(type.equalsIgnoreCase("Double")){ value=rs.getDouble(fname); }else if(type.equalsIgnoreCase("Float")){ value=rs.getFloat(fname); }else if(type.equalsIgnoreCase("date")){ value=rs.getDate(fname); }else if(type.equalsIgnoreCase("long")){ value=rs.getLong(fname); } //***************** 将取出来当前属性的值设置给当前对象obj**************** //1>获取当前对象的所有set方法,并找到当前取出来的属性对应的set方法 Method[] methods=c.getDeclaredMethods(); for(Method m:methods){ //获取当前方法名 String methodName=m.getName(); //判断是不是当前属性 if(methodName.equalsIgnoreCase("set"+fname)){ //执行该方法 m.invoke(obj, value); } } } list.add(obj); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; }