之前在写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; ???}
JSP底层方法的封装
原文地址:https://www.cnblogs.com/1960366876tZ/p/9164776.html