该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间: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 |
|
返回顶楼 | |
发表时间:2010-03-20
选合适的产品解决适合的问题。很多人在说这个那个框架的时候,像是在玩田忌赛马,人无完人,jar无完jar……
hibernate上升到这样的高度,对选择他的企业、项目来讲,不必要重新发明轮子、有大量的文档可查、有牛人可以被请来培训,有可用的程序员可以招揽。 hibernate的配套设施越来越全,我们在annotations、validator做扩展,就可以满足项目对于这两方面的业务需要,提高效率。 数据库我们倒是不常换,而且偶尔有些本地化的sql没法通用。 楼上同学说的OO思想极为赞同! |
|
返回顶楼 | |
发表时间:2010-03-21
关于Hibernate,还是等我出一本书来从底层原理上来提高用户对它的认识吧。
|
|
返回顶楼 | |
发表时间: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。 |
|
返回顶楼 | |
发表时间:2010-03-21
hibernate 我觉得理念是做的非常好的
弄过面向对象编程的人 虽然还有面向过程的手段 但是怎么也不愿意回头到C编程时代了 |
|
返回顶楼 | |
发表时间:2010-03-22
产品化的项目,hibernate的优势太大。
不过hibernate的缺点其实也摆在那边,hql并不简单,也不轻松。对复杂查询支持不算好;性能调试和问题排查非高手不能办。 对于习惯sql的程序员来说,debug出来奇怪的sql难以阅读 |
|
返回顶楼 | |
发表时间:2010-03-22
至今 还不怎么懂 这个东西
|
|
返回顶楼 | |
发表时间:2010-03-22
该jdbc就jdbc,该hiberntate就hibernate
|
|
返回顶楼 | |
发表时间:2010-03-22
用了orm,sql调优是个大问题,甚至一些传统的诊断调优方法都没办法用了。比如oracle费尽心思历经数个大版本建立起来的一套自动优化SQL执行计划的算法CBO,如果用了orm,那这些就意义寥寥了。
|
|
返回顶楼 | |
发表时间:2010-03-22
novembersky 写道 用了orm,sql调优是个大问题,甚至一些传统的诊断调优方法都没办法用了。比如oracle费尽心思历经数个大版本建立起来的一套自动优化SQL执行计划的算法CBO,如果用了orm,那这些就意义寥寥了。
终于见到一个对sql调优有经验的人,请问,传统sql调优有哪些主要方法,这些方法的效果如何,ORM是如何将这些SQL调优方法都阻碍了呢? 我觉得,只有了解了SQL调优的传统方法,才能进行比较得出ORM之上的解决方案,之前所见的人都是空对空,只知道说ORM性能有问题,却没有给出SQL调优的解决之道。抓住一个点进行具体分析,才适合搞技术的。 |
|
返回顶楼 | |