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

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

参考项目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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值