由于我刚从ASP转到JSP,进入一家公司,一个有经验的同事带我!
在写BEAN对数据库的时候,我肯定每次都是先把属性BEAN写好,GETTER和SETTER,他刚开始当然觉得只要完成任务就行,之后他慢慢教我一些他的经验,就这个,他说,他不喜欢那样把字段写死
也就是不写GETTER和SETTER属性,它只有一个HASHMAP,对应字段和值,然后用如下类似代码
ResultSetMetaData rsmd = rs.getMetaData(); //rs是一个结果集
while(rs.next()){
for(int i=0;i<rsmd.getColumnCount();i++){
com.dot.gpoa.dqh.UpRingData up = new com.dot.gpoa.dqh.UpRingData();  //up是一个HASHMAP对象
up.setValue(rsmd.getColumnName(i+1),rs.getString(i+1));
这样的话,在JSP就可以直接取字段值,因为你要取什么字段是根据SQL语句来的
这样灵活的取数据库字段信息,就算数据库有变更,增加字段和删除字段,并不影响他!因为我是ASP转过来到的,经验当然没他多,感觉好象有点道理,但所有我看的资料都要有个GETTER和SETTER属性BEAN啊,而且hibernate不正是需要它生成映射文件么!请教一下老鸟,他这样写有什么好处和坏处,可取么??我不是想批判他,只是想搞清楚(他人挺好,教了我很多)

解决方案 »

  1.   

    这种方式我也经常使用,最大的好处就是省去了很多的Bean对象,而且数据的封装也很简单,我的感觉是没有什么坏处的
      

  2.   

    楼上的哥们门,不知道学习过hibernate么,反正我才学不长,不如就拿这种和hibernate做对比说吧,不然,总感觉说不到实质上去!希望说详细一点~
      

  3.   

    hibernate的封装主要是根据映射文件,然后使用反射机制来自动实现的.反射机制的效率其实也就一般了,不过平时像我们用于页面显示封装的数据都仅限于几十条,如果查询不是很大这点效率我觉得都可以忽略了,象 kingofhawks(蓝鹰) 说的,灵活性的加大都是以牺牲性能为代价的,如果你要灵活方便,就必然是会牺牲一小部分性能的,至于怎么选看你项目的的要求来定吧..
      

  4.   

    hibernate不会对性能有太大的影响啦,我记得hibernate中反射用的很少吧?
    其实反射用多了是会对性能有很大影响,但现在的开源框架,比如hibernate和spring都严格控制了反射代码的调用次数。所以性能影响在大部分企业应用中都是可以忽略的,只有在银行或电信一类对性能要求极严的应用中才需要考虑。你同事那种做法在开发过程是会很灵活,但在维护时会有一定问题,尤其是别人来维护他的代码时,毕竟hibernate是公共标准嘛
      

  5.   

    1.我并不关心你们的OR用什么方案,只是看你所说的Bean不提供get,set方法,而代之以他所说的那种方法,说实话我并没有那样用过,但看得出来无非就是把你的get,set方法通过预先配置放在数据库中,然后每次用到的时候去查询数据库读取配置对吧?所以,当你用到Bean的时候必然首先需要做关于这些方法的数据库查询动作,这就是额外的开销啊,这个开销应该是独立于任何OR方案的吧.
    2.至于灵活性和开发效率,那因为你预先做好配置,自然不用每次都去get,set了,而且当Bean的属性变化的时候也仅需要修改配置就可以.
    不知道这样的理解对不对?
      

  6.   

    GOOD,都挺热心的!!
    我感觉我的做法是很好的体现了对象这个观念,属性BEAN就是一个对象,各个对象的关系在这个属性BEAN也能很好的体现,包括一对一,一对多的关系,他那样做,感觉JAVA中的对象已经不在,只是方便了JDBC操作!
    我的理解很肤浅吧,继续听意见,谢谢!
      

  7.   

    是的,提供get,set方法可以使程序结构清晰,容易理解.
      

  8.   

    应该是用get和set,
    对于bean来说也可以用反射来设值的,放到hashmap里的方式不好,就像.net里的datable一样,用起来可能很方便,要是不是一个人写这两部分,就惨了,还得去看sql语句
      

  9.   

    个人认为这个方法不妥
    struts标签中<bean:write name="" property="">,如果用MAP方法,第二个参数怎么写呢?
      

  10.   

    好好看一下JAVA的反射机制吧~!
      

  11.   

    个人认为这个方法不妥
    struts标签中<bean:write name="" property="">,如果用MAP方法,第二个参数怎么写呢?
    -------------------
    最近比较忙,没时间上来,呵呵,STRUTS和SPRING,HIBERNATE还在学习中,如果公司现在就要用这个开发,估计美工和老总都要头疼吧,特别是老总,每次都喜欢催啊催的,都认为开发多简单的!!!谢谢朋友们,请继续讨论~