J2EE开发中减少编写代码工作量的几种方法

    技术2022-05-11  62

    减少编写代码工作量的几种方法:

    参考项目Struts2,Appfuse,Springside,Easyjf

    1 使用模板生成代码  自定义模板变量和替换逻辑,velocity,freemaker,eclipse jet  基于annatation的xdoclet,java ee5  基于UML,XMI的MDA

    2 使用反射机制

      a) 完成对象-对象,对象到集合的复制     直接用commons-beanutils    b) 完成Recordset到domain object的转换     下面是一种方法:

        /    //Function: 完成ResultSet对象向ArrayList对象为集合的对象的转化    //Para:sql,指定的查询Sql   //Para:className,Sql相对应得JavaBean/FormBean类的名字   //Return:以类className为一条记录的结果集,完成ResultSet对象向ArrayList对象为集//合的className对象的转化  //  public ArrayList Select(String sql,String className){    ArrayList paraList=new ArrayList();    try{      if (conn == null){        Connection();      }      PreparedStatement stmt = conn.prepareStatement(sql);      ResultSet rs = stmt.executeQuery();      String recordValue="";      Object c1=null;      paraList=new ArrayList();      ResultSetMetaData rsmd = rs.getMetaData();      int columnCount = rsmd.getColumnCount();      while (rs.next()){          c1=Class.forName(className).newInstance();          for (int i=1; i<=columnCount; i++) {            if(rs.getString(rsmd.getColumnName(i))!=null){              recordValue=rs.getString(rsmd.getColumnName(i));            }else{              recordValue="";            }            Method m=c1.getClass().getMethod(getSetMethodName(rsmd.getColumnName(i)),new Class[]{recordValue.getClass()});            m.invoke (c1, new Object[]{recordValue});          }          paraList.add(c1);      }    }catch(SQLException ex){          }catch(ClassNotFoundException e){    }catch(NoSuchMethodException e) {    }catch(InvocationTargetException e){    }catch (IllegalAccessException e){    }catch(InstantiationException e){    } finaly{        closeConnection();    return paraList;    }      }

        在JavaBean封装的商业逻辑中调用Select 方法,然后在JSP页面上显示出来:

       //Function:取得用户列表  //Para:  //Return:返回用户列表  /  public ArrayList getUsers(){      ArrayList ret=null;      DatabaseManage db=new DatabaseManage();      String sql=" select usr_id,usr_name "          +" from users " ;      ret=db.Select(sql," com.bhsky. webis.system.UsersActionForm");      return ret;  }

      还有一种方法:比如在EasyJf-DBO里面将Recordset放到HashMap里面,然后使用beanutils复制到对象里面,相当于比上面的方法多了一个环节。

      c) 在基类(抽象类)里面使用,主要用在对对象的保存,更新,删除上     在DAO中实现CRUD的操作        public void insert(Object o) {  getSqlMapClientTemplate().insert(o.getClass().getName() + POSTFIX_INSERT, o); }     在Struts Action中实现domain object到formbean的转换,还可以实现其它的全局操作,例如日志 

    3 使用范型的方法,主要用在查询方法中  在基类(抽象类)中使用,主要用在查询的方法上   public <T> List<T> getAll(Class<T> entityClass) {  return getSqlMapClientTemplate().queryForList(entityClass.getName() + POSTFIX_SELECT, null); }

      对比一下反射的用法:    public List getObjects(Class clazz) {        return getSqlMapClientTemplate().queryForList(getSelectQuery(ClassUtils.getShortName(clazz)), null);    } 


    最新回复(0)