对Hibernate使用之愚见

对Hibernate使用之愚见

  国人跟风之潮,自古有之,至今亦然。

   确实,经过配置优化的Hibernate效率与无任何优化的Hibernate效率诚然不可同日而语。但由于项目开发的复杂性,开发周期中一些突发因素的制约,及项目构建者自身能力的约束,在大型项目中,尤其是在表结构复杂的大型项目中,以某之愚见,国内能将Hibernate真正使用妥当者,尚未多有。

目前随处可见的Hibernate优化方式无外以下几条

   1、修改hibernate.properties,增加以下两句:

          hibernate.jdbc.fetch_size=50 设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,目前MySQL似乎还不支持
          hibernate.jdbc.batch_size=100 对数据库进行批量删除,批量更新和批量插入的时候的批次大小,令多条语句使用batch操作

   2、one-to-many的关系里将lazy设成true,开启延迟加载

   3、HQL优化,对于语句本身进行优化

   4、映射文件优化(ID生成策略,二级缓存,延迟加载,关联优化)

   5、对大数据量查询时,慎用list()或者iterator()返回查询结果

   6、Session管理优化,可考虑使用spring的HibernateTemplate

   7、一级缓存的管理优化

   8、针对二级缓存,使用相关策略

   9、事务控制优化
 
  另外Hibernate本身借助cglib对字节码有一定程度的优化,但是目前受到Java本身效率限制,感觉上帮助并非很大。

  当然了,我仅是大体上说说,本身还有很多很多细节方面的问题存在,及其它很多设置可供调整。但是,由于本人之不学,即使这样,设定出的Hibernate之效率依旧不高,PS:我开篇便已说过,这是由于本人能力低下造成的,与Hibernate无甚相关。

  但在同样表结构复杂项目中,使用相对简单的ibatis,不需什么配置,却明显在效率上优于Hibernate(再重申,在下从没说过Hibernate效率有问题,只是某才疏学浅配置不当而已),

  我粗略的将两者作以下对比:


1.  iBATIS非常简单易学,Hibernate相对较复杂,门槛较高(借助IDE还比较方便)。

2.  二者都是比较优秀的开源产品(谁否认?谁敢否认?)

3.  当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合(我就是经常做遗留项目……)

4.  系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。

5.  iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比

Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。(真正配置好的Hibernate当然很方便,问题是什么人负责配置……)

6.  iBATIS以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。

7.  Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS(从目前大多数公司的跟风态度便可以看出)

8.  最关键的一句话是iBATIS的作者说的,我认为很诚恳:
If you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy

 事实上,我并不反对Hibernate,而且是在争取成为其拥护者(最近在开始扣Hibernate代码,其实从05年就开始,但是没坚持超过3天……),

但是,以某之不才及短见,却不赞同无论任何项目都使用Hibernate,尤其是无理由的想当然跟风使用。甚至某些人把背下Hibernate中一些API都当成很自豪的事情,更让我觉得不可理喻。
 
 框架体系这些东西,说到底,是为更有效的完成编程目的而存在的。无论内部斗得多么厉害,对用户来说也是毫不相关的事情(除非用户在某些事物影响下自己提出来要用什么框架……), 愚虽不才,还是希望能因时因人因事而定,不要一概而论。

有感而发,不知所云,兴起而言,兴尽乃至。
 
posted on 2007-08-19 19:56 cping 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/cping1982/archive/2007/08/19/2258119.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式学习总结1 - 创建型1 - Abstract Factory抽象工厂模式

AbstractFactory抽象工厂模式(创建型) 作用: 这种模式支持创建不同的对象,这些对象功能接近且一般都是在一起创建的。抽象工厂被具体化成不同的工厂来创建类似产品的不同产品。这种模式将类于使用的客户端分离以便通过工厂来创建。…

QT练习9 Dialog学习

http://files.cnblogs.com/hnrainll/dialog.zip 源代码下载转载于:https://www.cnblogs.com/hnrainll/archive/2011/05/30/2063135.html

C#中NULL,,DBNULL,String.Empty,Convert.IsDBNull()的区别

C#中的空值的判断较麻烦,不象在VB6中那么简单,这些各种空值的判断和理解对不熟悉的人来说,可能很麻烦,现就我在使用过程中的一点体会和大家共同分享。 (1)NULL null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型…

关于初始化C++类成员

转自:http://www.vckbase.com/document/viewdoc/?id584 在使用C编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种: 第一种方法: CMYClass::CSomeClass() {x0;y1; } 第二种方法: CSomeClass::CSomeClass…

ASP.NET 2.0 中的新增服务、控件与功能概述(四)

原文出自http://blog.sina.com.cn/s/blog_48b6cd65010004fc.html个性化 另一个新增的服务是个性化,它提供了一种现成的解决方案,用于解决存储站点用户的个性化设置问题。目前,此类设置通常存储在Cookie、后端数据库或这两者中。无论这些设置存…

C/C++ 交换两个数,不使用第三个变量, 函数模板来实现

#include <iostream>template<typename T> void exchangeTwoNumber(T &t1, T &t2)&#xff1b;void test();int main() {int a 10, b 20;double q 10.1, w 20.2;char z z, x x;std::cout << "交换前的 a " << a << &qu…

Oracle错误集!

个人使用Oracle时出现的错误&#xff0c;在这里记下来&#xff0c;加深印象。 1、ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes 今天写存储过程时&#xff0c;使用dbms_output.put_line(result:||i||---||documentID);输出测试结果。当我设置其输出记录较多…

[原+转]CSS hack 小技巧 让你的CSS 兼容ff ie6.0 ie7.0

在做东西的时候发现在ie6.0中做的东西到ff下面目全非100% css不兼容不问题 查阅了相关资料 个人感觉以下是一个笨的也是比较快的处理兼容问题的方法方法就是针对不同的浏览器写不同的css 以前用!important 但是ie7 和ff 就不好分了个人感觉比较好的方法是 samplepadding:0px; …

准备试用svn

用了VSS2005感觉一般&#xff0c;准备试用svn&#xff01;&#xff01;&#xff01;转载于:https://www.cnblogs.com/jessenee/archive/2008/03/31/1131027.html

web功底之强,实属罕见。。

不看不知道&#xff0c;一看汗得死你了。。纯用html做的。不多说&#xff0c;看看就知道了&#xff0c;http://www.kanqq.com/qq/smilies/ku.htm 以人格保证&#xff0c;不是病毒网页。。。 转载于:https://www.cnblogs.com/lsgoodsun/archive/2007/11/04/949222.html

第三次作业-Scrum

理解&#xff1a; 首先&#xff0c;敏捷并不是一门具体的技术&#xff0c;而是一种理念或者说是一种思想。它可以指导我们更加高效的开发。其次&#xff0c;敏捷开发都具有以下共同的特征&#xff1a; 1.迭代式开发2. 增量交付 3. 开发团队和用户反馈推动产品开发 4. …

如何处理错误消息Please install the gcc make perl packages

2019独角兽企业重金招聘Python工程师标准>>> 如何处理这行错误消息&#xff1f; Please install the gcc make perl packages from your distribution。 执行命令行&#xff1a;yum install gcc perl make 输出&#xff1a; Loaded plugins: product-id, search-dis…

iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度

1.让图片旋转 UIImageView *imageView [[UIImageView alloc]init]; imageView.frame CGRectMake(50, 50, 200, 200); imageView.image [UIImage imageNamed:"460.jpg"]; CGAffineTransform transform CGAffineTransformMakeRotation(M_PI*0.38); imageView.tr…

致毕业生:那些年我们错过的“BAT”

本文旨在用最通俗的语言讲述最枯燥的基本知识最近看到公众号中各种推“招聘季金九银十铜十二”之类的文章&#xff0c;把毕业季找工作需要应对的事情和解决方法都已经写的很详细了&#xff0c;还有各种面经考经挥之即来&#xff0c;已经没必要再去写这样的一个文章了&#xff0…

PHP函数收藏---不断更新中!

替换html标签 function strip_bad_tags($html) { $s preg_replace ("?[^>]*>*", "", $html); return $s; } 替换指定tag,$text是需要替换的文本,tags 是需要替换标签的数组 function strip_selected_tags($text, $tags array()) { $args func_ge…

gcc 5.2.0 手动更新(亲测)

注意:(不要在gcc-5.2.0 源码目录中执行 configure&#xff0c;否则会报错)安装操作如下&#xff1a;0、yum 安装 gcc yum -y install gcc gcc-c libstdc libstdc-devel autoconf makegcc-5.2.0 下载地址&#xff1a;ftp://gcc.gnu.org/pub/gcc/releases/gcc-5.2.0/gcc-5.2.0…

Lie to me不错

最近Fox的新剧有个Lie to me不错&#xff0c;如果你腻了了没完没了的Lost&#xff0c;觉得Hero开始离谱了&#xff0c;Prison Break只能重看第一季了&#xff0c;怀念Friends的经典又不忍心再看第10遍的话&#xff0c;这个剧是个不错的选择。 看了一集了&#xff0c;每个人平均…

NLog 简单使用

1.安装NLog 使其集成到VS 里 下载地址&#xff1a; http://nlog-project.org/ 2.NLog.config <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi"http://www.w3.or…

10.31T2 点双联通分量+预处理前缀+二分答案

2.逛公园I (parka) 【问题描述】 琥珀色黄昏像糖在很美的远方&#xff0c;思念跟影子在傍晚一起被拉长…… 小 B 带着 GF 去逛公园&#xff0c;公园一共有 n 个景点&#xff0c;标号为 1 . . . n。景点之间有 m 条路径相连。 小 B 想选择编号在一段区间 [l, r] 内的…

SQL学习笔记之存储过程的编写

今天写几个存储过程&#xff0c;觉得有这个必要记录下来&#xff0c;方便以后忘了也好有个备份&#xff0c;都很简单&#xff0c;高手可以不用看的。一、记录的插入--region [dbo].[InsertArchive]--------------------------------------------------------------------------…