用户操作
[即时聊天] [发私信] [加为好友]
纯月ID:danny_xcz
858621次访问,排名41好友2人,关注者91
danny_xcz的文章
原创 296 篇
翻译 3 篇
转载 25 篇
评论 639 篇
纯月的公告
最近评论
zhengjiashuai:收藏了先
zjxzou:bucuo~
yu3350360:收藏了先 呵呵
henhaohll:有些意思啊!呵呵 ..
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
文章分类
收藏
    相册
    Blog用途
    我的相册
    Java Desktop
    Open Source
    友情链接
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: Struts 2.0 解读笔记 | 旧一篇: Visual WebGui 基于ajax的界面框架

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

    参考项目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);
        }
     

    发表于 @ 2007年02月07日 13:32:00|评论(loading...)|编辑

    新一篇: Struts 2.0 解读笔记 | 旧一篇: Visual WebGui 基于ajax的界面框架

    评论

    #flyforlove 发表于2007-02-08 08:51:31  IP: 219.166.187.*
    }catch(SQLException ex){

    }catch(ClassNotFoundException e){
    }catch(NoSuchMethodException e) {
    }catch(InvocationTargetException e){
    }catch (IllegalAccessException e){
    }catch(InstantiationException e){

    你经常这样catch住exception后,什么都不做么?
    #jeamzhang 发表于2007-02-08 09:30:56  IP: 61.186.170.*
    有长见识了!!getSetMethodName!!这个方法好用,一直不知道!
    #bromon 发表于2007-02-09 14:17:29  IP: 218.104.205.*
    如果你都采用这样的方式写代码,你考虑过那些读你代码的人的感受么?与代码的易读易维护相比,省那么几十行代码很重要吗?

    另外我也很想知道,博主以下面这种方式处理异常,是出于什么考虑。我个人认为这样处理方式,非常让人生气:
    }catch(SQLException ex){
    }catch(ClassNotFoundException e){
    }catch(NoSuchMethodException e) {
    }catch(InvocationTargetException e){
    }catch (IllegalAccessException e){
    }catch(InstantiationException e){
    #yuyebuguijia 发表于2007-02-09 14:21:14  IP:
    来上学习班
    #lemonfamily 发表于2007-02-09 22:40:06  IP: 125.77.227.*
    我想楼主不过是给个例子,实际中确实会多考虑一点,还是不要太挑刺,呵呵~~
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 纯月