论坛首页 Java企业应用论坛

不选或许有千万种理由,但是选择hibernate只需要一个理由就足够了

浏览 39084 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-03-20   最后修改:2010-03-25
icewubin 写道
linliangyi2007 写道
gdpglc 写道
我觉得 hibernate 还有一个很关键的用处,也是ORM框加的重要用处,帮助程序使用面向对象的方法来表达业务逻辑。而这正是hibernate的根本所在。不理解面向对象的人,理解hibernate是有困难的。如果只把对象作为库表内容的包装,这是一种肤浅的看法。hibernate要做的是使得业务逻辑的表达只要关注对象就可以了,而对象和数据库的关系,则由hibernate来维护。在理想状态下,业务逻辑可以不考虑数据库的访问(当然现实是做不到的),这就使得面象对象的思想得以实现。

只有有了这种关念,才能把握好 对象和库表的关系,尤其是对象间关系和库表间关系的差异和对应,才能理解hiberante的种种行为。只会用hibernate存取一个POJO,用面向过程的思维来理解hibernate这叫 暴殄天物


+1 ,

楼主 和 楼上这位同学的观点都很到位


建议大家看看领域驱动设计,还有马丁的几本老书,再来看Hibernate的设计,就知道hibernate的价值所在,以及设计成这样的原因了。

当然对hibernate了解到一定程度,完全可以跳出框框,只用你需要的部分,没必要用全hibernate中的所有功能啊。

可否参考一下bbossgroups开源项目的持久层框架,bbossgroups包含一下子项目:
1.bboss-persistent, a persistent framework.
参考bbossgroups框架来实现持久层的操作:
a.灵活的事务管理(声明式事务管理,可编程事务管理,java注解事务管理,jdbctemplate事务管理,五种经典的事务类型,支持事务嵌套,支持多数据库分布式事务)
b.灵活的访问数据库的接口(普通sql操作,预编译sql操作,普通/预编译批处理操作,存储过程,函数)
c.一套经典的数据库操作标签库(增删改查,普通sql操作,预编译sql操作,普通/预编译批处理操作)
d.经典的多数据库连接池配置管理和使用方法(所有的数据库操作接口可以直接指定连接池的名称,方便地实现对不同数据库的操作)
e.提供了简单的o/r mapping查询接口
f.提供了多种行处理器来提升查询操作的性能
g.可以方便地实现blob,clob字段的处理
h.提供分页操作接口(预编译和普通),可以方便地址各种数据库的分页操作
2.bboss-taglib, a web layer taglib framework(list tag,pageine list tag,detail tag ,logic tag,tree tag,tabpane tag,dbutil tag).
3.bboss-aop, an aop framework.(ioc ,rpc[jms,mina,jgroups,cxf webservice],bean component,cxf webservice component framworkset and so on).
4.bboss-event, an event framework(local event,remote distribute event framework base aop rpc framework).
5.bboss-util, an utility framework.
6.antbuildall, ant build project that build up projects.
7.bbossevent-client, an event remote client test project.
8.bboss-client, an rpc client test project.(jms,mina,jgroups,cxf webservice,restful).
9.bboss-ws, bboss webserive framework test project.
10.bbossgroups document 目录包含framework 开发文档和bboss aop框架的技术使用文档

bboss group project blog:
http://blog.csdn.net/yin_bp
http://yin-bp.iteye.com/

bboss group project sourceforge site url:
http://sourceforge.net/projects/bboss/files/

从bbossgroup 1.0开始,已经将以前的持久层框架,aop框架,标签库框架,事件框架,工具框架,全部作为bbossgroup 的子项目一起发布
新增antbuildall [ant complile for all bboss group projects],可以运行antbuildall下的run.bat命令编译所有的子项目,并且更新相应工程
的引用jars。


release version : bbossgroups-1.0
release date: 2010/03/18
release files:Contain all sub projects source files,distribute files,All projects dependended jars,So the file size is some bigger,do not warry,every sub project can be downloaded alone.

bbossgroups 最新版本 1.0,整合了原来所有的子项目(持久层框架,标签库框架,aop框架,事件框架),下载地址:
https://sourceforge.net/projects/bboss/files/
hibernate确实不适合用来做大型项目的持久层工具,建议参考一下bbossgroups框架来实现持久层的操作:
1.灵活的事务管理(声明式事务管理,可编程事务管理,java注解事务管理,jdbctemplate事务管理,五种经典的事务类型,支持事务嵌套,支持多数据库分布式事务)
2.灵活的访问数据库的接口(普通sql操作,预编译sql操作,普通/预编译批处理操作,存储过程,函数)
3.一套经典的数据库操作标签库(增删改查,普通sql操作,预编译sql操作,普通/预编译批处理操作)
4.经典的多数据库连接池配置管理和使用方法(所有的数据库操作接口可以直接指定连接池的名称,方便地实现对不同数据库的操作)

5.提供了简单的o/r mapping查询接口
6.提供了多种行处理器来提升查询操作的性能
7.可以方便地实现blob,clob字段的处理
8.提供分页操作接口(预编译和普通),可以方便地址各种数据库的分页操作


bbossgroups 最新版本 1.0,整合了原来所有的子项目(持久层框架,标签库框架,aop框架,事件框架),下载地址:
https://sourceforge.net/projects/bboss/files/
持久层框架子项目下载地址:
http://sourceforge.net/projects/bboss/files/bbossgroups-1.0/bboss-persistent.zip/download
  • 大小: 43.1 KB
  • 大小: 3.3 KB
0 请登录后投票
   发表时间:2010-03-20  
选合适的产品解决适合的问题。很多人在说这个那个框架的时候,像是在玩田忌赛马,人无完人,jar无完jar……
hibernate上升到这样的高度,对选择他的企业、项目来讲,不必要重新发明轮子、有大量的文档可查、有牛人可以被请来培训,有可用的程序员可以招揽。
hibernate的配套设施越来越全,我们在annotations、validator做扩展,就可以满足项目对于这两方面的业务需要,提高效率。
数据库我们倒是不常换,而且偶尔有些本地化的sql没法通用。
楼上同学说的OO思想极为赞同!
0 请登录后投票
   发表时间:2010-03-21  
关于Hibernate,还是等我出一本书来从底层原理上来提高用户对它的认识吧。
0 请登录后投票
   发表时间:2010-03-21  
linliangyi2007 写道
gdpglc 写道
我觉得 hibernate 还有一个很关键的用处,也是ORM框加的重要用处,帮助程序使用面向对象的方法来表达业务逻辑。而这正是hibernate的根本所在。不理解面向对象的人,理解hibernate是有困难的。如果只把对象作为库表内容的包装,这是一种肤浅的看法。hibernate要做的是使得业务逻辑的表达只要关注对象就可以了,而对象和数据库的关系,则由hibernate来维护。在理想状态下,业务逻辑可以不考虑数据库的访问(当然现实是做不到的),这就使得面象对象的思想得以实现。

只有有了这种关念,才能把握好 对象和库表的关系,尤其是对象间关系和库表间关系的差异和对应,才能理解hiberante的种种行为。只会用hibernate存取一个POJO,用面向过程的思维来理解hibernate这叫 暴殄天物


+1 ,

楼主 和 楼上这位同学的观点都很到位


非常赞同,我一开始也是用hibernate来存取pojo,甚至连外键都不配。后来学习了DDD和spring,才明白,是hibernate和spring让DDD成为可能。有了hibernate,我觉得DAO层都是多余,因为DAO这个名字就是过程化的概念,应该直接把hibernate作为Object Repository。
0 请登录后投票
   发表时间:2010-03-21  
hibernate 我觉得理念是做的非常好的
弄过面向对象编程的人 虽然还有面向过程的手段
但是怎么也不愿意回头到C编程时代了
0 请登录后投票
   发表时间:2010-03-22  
产品化的项目,hibernate的优势太大。

不过hibernate的缺点其实也摆在那边,hql并不简单,也不轻松。对复杂查询支持不算好;性能调试和问题排查非高手不能办。

对于习惯sql的程序员来说,debug出来奇怪的sql难以阅读

0 请登录后投票
   发表时间:2010-03-22  
至今 还不怎么懂 这个东西
0 请登录后投票
   发表时间:2010-03-22  
该jdbc就jdbc,该hiberntate就hibernate
0 请登录后投票
   发表时间:2010-03-22  
用了orm,sql调优是个大问题,甚至一些传统的诊断调优方法都没办法用了。比如oracle费尽心思历经数个大版本建立起来的一套自动优化SQL执行计划的算法CBO,如果用了orm,那这些就意义寥寥了。
0 请登录后投票
   发表时间:2010-03-22  
novembersky 写道
用了orm,sql调优是个大问题,甚至一些传统的诊断调优方法都没办法用了。比如oracle费尽心思历经数个大版本建立起来的一套自动优化SQL执行计划的算法CBO,如果用了orm,那这些就意义寥寥了。


终于见到一个对sql调优有经验的人,请问,传统sql调优有哪些主要方法,这些方法的效果如何,ORM是如何将这些SQL调优方法都阻碍了呢?

我觉得,只有了解了SQL调优的传统方法,才能进行比较得出ORM之上的解决方案,之前所见的人都是空对空,只知道说ORM性能有问题,却没有给出SQL调优的解决之道。抓住一个点进行具体分析,才适合搞技术的。
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics