锁定老帖子 主题:介绍一个hibernate的实际项目
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2003-12-06
这是我们公司的一个实际产品,主要面向校园一卡通市场,目前 已经有了两个高校案例。不过这里,我主要是想介绍技术层面的 东西,交流一下Hibernate在实际项目中的应用。 我们公司从去年秋天就开始研究Hibernate,并在两个小项目中初步 使用,效果还可以。 因此在今年年初,新的校园一卡通项目启动时,就决定用Hibernate 来代替EJB作为主要的O-R技术。项目到这个星期,才算出了内部测试 版,化费了几乎4个人9个月的时间。九月份时,还用一个中间版本实 施了一个实际项目。 具体技术问题就不说了,只聊一些粗略的体会吧(我在论坛上向来只 喜欢务虚:) ) 1. Hibernate的功能还是比较完善的,我们项目的需求还算比较复杂, 只有少量数据库的性能调整工作还需要手工做。 2. Hibernate的性能不错,特别是用了Cache。 3. Hibernate缺点也有很多,不过都不算很严重。唯一可以说是不能 接受的是2.0.3的Callback方法中无法对session操作,很难把一些业务 逻辑放到PO当中。在实际项目中,我们在Hibernate 上又封装了一层API,定义了自己的Callback。 4. 分析模型最重要。由于Hibernate简化了DB操作,闲下来的时间让人 自然提高对模型的要求。我们有相当长的时间花在模型设计和不断的refactor上。 5. 重构的诱惑。由于项目的目标是产品化,所以很多地方刻意追求, 几乎每一块代码都经过了3次以上较大的重构。这样做有好处,但也给 小组成员的配合上带来了问题。 我自己开发的统一认证和授权系统(没最终完成),有对这一块感兴趣的 朋友可以重点看看,多提些意见,谢谢。 开发环境: Hibernate2.0.3 Eclipse/xdoclet/maven Tomcat4.13 SQLServer2000 Win2000Server 部署环境: RedHat 7 Websphere4 Oracle9i 另外,本贴同时贴在Jdon和hibernate中文论坛上,顺便感谢banq和robbin两位 站长对Java社区所作的贡献。 guty@brisoft.com.cn 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2003-12-06
还有一些数据:
数据对象:60多个 数据表: 39张表 系统主要负荷:每天6-7万笔交易流水 交易表数据量:>1000万条记录 |
|
返回顶楼 | |
发表时间:2003-12-06
速度比较慢,不知道正式运行起来怎样?呵呵!
|
|
返回顶楼 | |
发表时间:2003-12-06
我也是用Hibernate做的,用户、部门、职位、组、角色、资源、操作、权限(角色、操作、资源)。
只针对角色授权,但很多人提出直接对用户和部门授权,是不是我弄的太复杂了~~@_@ |
|
返回顶楼 | |
发表时间:2003-12-06
谢谢guty!当初就是guty的帖子让我发现了Hibernate。
软件做的好漂亮! Javascript用的出神入化了,完全的Outlook风格的操作。 不知道你们生成Excel用的是什么API,是JXL,还是POI? 引用 唯一可以说是不能接受的是2.0.3的Callback方法中无法对session操作,很难把一些业务逻辑放到PO当中。在实际项目中,我们在Hibernate上又封装了一层API,定义了自己的Callback
这个问题有些争议。把业务逻辑放到PO当中形成BO,到底是否合适?以及如何调整PO和BO之间的关系,yyanghhong发起过一个讨论,请看这里: http://forum.hibernate.org.cn/viewtopic.php?t=1116 实际上我原来是倾向于在PO里面添加业务逻辑形成BO的,但是我现在倾向于分开来。因为我发现在PO里面添加业务逻辑的时候必须非常小心,有些代码会破坏Hibernate对PO本来的状态管理。例如你在PO里面对PO的一个集合属性取size()方法,就会破坏one-to-many的lazy loading,这是我们公司一个同事发现的,他在论坛发过贴和yehs220讨论过这个问题。 |
|
返回顶楼 | |
发表时间:2003-12-06
非常漂亮!
|
|
返回顶楼 | |
发表时间:2003-12-06
Dennis 写道 速度比较慢,不知道正式运行起来怎样?呵呵!
是吗·?在局域网内速度还可以。 我们现在通过拨号网络,用windows的虚拟终端为9月份的那个客户做远程维护,速度确实比较慢,但那主要是因为网络速度。 |
|
返回顶楼 | |
发表时间:2003-12-06
deeprising 写道 我也是用Hibernate做的,用户、部门、职位、组、角色、资源、操作、权限(角色、操作、资源)。
只针对角色授权,但很多人提出直接对用户和部门授权,是不是我弄的太复杂了~~@_@ 我也是只对角色(组)授权,因为对用户和部门的授权都可以通过增加定义角色(组)来解决。 由于系统是多应用,多单位的系统,我们定义角色(组)由三元素组成: (应用<application>, 单位<orgRole>, 标识<id>). 有的应用程序是singleton的,例如"统一认证系统",只有一个实例,所以它的角色(组)中没有单位属性。 有的应用程序是多实例的,例如"商户管理系统",如果给一个单位"图书馆"增加了"商户角色",就自然建立了"商户管理系统 - 图书馆"这个实例。 这类系统有两种组,一种和单例应用的组一样,另一种是具有单位属性,可以由单位的管理人员单独设置权限的组。前者是为了简化权限配置,后者是为了满足不同单位各自的授权要求。 |
|
返回顶楼 | |
发表时间:2003-12-06
robbin 写道 软件做的好漂亮! Javascript用的出神入化了,完全的Outlook风格的操作。 谢谢:)我们TEAM中,有一个是javascript高手,所有的界面工作几乎都是他做的。 robbin 写道 不知道你们生成Excel用的是什么API,是JXL,还是POI?。 用的是POI。不过后来报表部分不是用的Excel,而是用Javascript,因为同事发现在IE6中用Javascript打印控件的效果是非常好的。 robbin 写道 这个问题有些争议。把业务逻辑放到PO当中形成BO,到底是否合适?以及如何调整PO和BO之间的关系,yyanghhong发起过一个讨论,请看这里: http://forum.hibernate.org.cn/viewtopic.php?t=1116 实际上我原来是倾向于在PO里面添加业务逻辑形成BO的,但是我现在倾向于分开来。因为我发现在PO里面添加业务逻辑的时候必须非常小心,有些代码会破坏Hibernate对PO本来的状态管理。例如你在PO里面对PO的一个集合属性取size()方法,就会破坏one-to-many的lazy loading,这是我们公司一个同事发现的,他在论坛发过贴和yehs220讨论过这个问题。 这个问题确实不好选择。但从实际情况来看,经过多次refactor,我们TEAM中几乎到最后都选择了往PO里添加逻辑。 这样作的主要优点是复用性更好,对Object本身行为的封装也更自然和严谨。因为既然Hibernate开放了session接口,可以直接对数据增删改,如果不把逻辑封装到PO中去,是一件比较危险的事情,不可能要求所有地方都通过BO来操作数据。 关于破坏状态,可能也就是我们遇到的问题吧。我们其实封装了hibernate session api,并且定义了Root PO, 定义了自己的CallBack API,就避免了问题。 封装API的好处还在于,1,可以用ThreadLocal变量获取当前Session,避免应用代码方位Session; 2, 将HibernateException转化成RuntimeException,简化了很多应用代码。3, 做一些Hibernate还不能实现的功能:) |
|
返回顶楼 | |
发表时间:2003-12-06
yehs220 写道 非常漂亮!
谢谢版主:) 你是我见到的非常少的从不高谈阔论,只勤勤肯肯回答技术问题的人,和robbin是两个风格, hehe,robbin两点兼而有之。 |
|
返回顶楼 | |