原创作者: bjwulin   阅读:3102次   评论:0条   更新时间:2011-06-01    
环境:
spring:1.1
hibernate:2.1.6
strut:1.2.4

在做这个项目前,我们一直用servlet+jsp+javabean+jdbc开发系统,开发过程简单,效率也还可以,但就是sql写的太多,后期维护的工作量越来越大。而且PO基本上是table的一个对应,PO之间没有类的关系。在前期系统分析,基本上是做数据结构分析,功能分析等。

在做现在这个项目,我坚决按照面向对象分析系统,一个迭代过程中产生4种图:用例图、类图、序列图,和页面流程图。

开发过程:
1、按照分析的结果,形成PO,并且在PO上添加hibernate doclet,然后生成Mapping文件,生成数据库结构。这时候的PO之间的关系完全按照现实中的事物之间的关系构造的。
2、PO做完后,就做DAO的接口,在对接口做测试类,然后利用spring提供的hibernateTemplate封装了数据库数据分页,然后实现了DAO接口类。
3、做业务类,过程也是按照接口,测试类,实现类的过程做
4、表现层,也就是Struts,没有什么说的。

现在遇到的下列问题:
1、我的PO都是按照对象关系来建立的,因此用hibernate查询的时候,一个查询竟然涉及到9个表,有可能是A和B、c有关系,而B又和D有关系,等等。这样一个很长的left join,我觉得对效率有很大的影响。
2、用Struts,用ActionForm做VO,就存在转换的问题,因为PO是面向对象的,而ActionForm是和表现对应的,一般来说我都将几个PO要显示的属性合成一个ActionForm,这样就带来了转换的问题,麻烦!!!用BeanUtils的copy,又出现问题,lazy initiation错误,尽管我不copy lazy的属性。于是我只有封装BeanUtils,指定那些不用copy,那些要copy的。还有PO的hashcode(),我只有将非lazy=true的属性写到hashcode中。
3、从ActionForm到PO时,还有个问题,就是ActionForm的信息不全,我通常只有从数据库Load一个对象,然后在copy属性,然后在dao.save(obj)。这样的效率有没有影响?
4、因为将事务交给Spring 容器管理,因此,一些需要共享事务的原子操作,我就只有利用HibernateCallback对象,将一个大操作的select ,delete,insert ,update都放在callback里面,我不知道有没有比这更好的方式?

谢谢大家。
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

  • letle在2004-11-26创建
  • letle在2011-06-01更新
Global site tag (gtag.js) - Google Analytics