我对Hibernate的看法

        在这里,我首先声明一下,我不是Hibernate的Fans,甚至在某种角度上,我算是Hibernate的反对者。我的编程历史比较长,所以对SQL语句比较熟,因此,当刚听说有Hibernate这么一号开源项目时,我的第一个反应就是, 开发及使用Hibernate的人都有毛病,明摆着是在把简单问题复杂化。但让我大跌眼镜的是,Hibernate迅速流行了起来,以至于有时候我在接一些外包项目时,发包方明确提出了需要使用Hibernate来实现数据库操作。迫不得已的情况下,我开始使用Hibernate。

        就我感觉,Hibernate的最大优势在于Insert操作和Update,在JDBC不支持命名参数SQL的情况下,使得对于字段较多的表的Insert操作和Update操作用的可读性大为提高。

        对于查询操作,Hibernate只适用于根据ID定位单条记录,然后返回一个对象。对于HQL,我个人觉得很垃圾,因为它并不比SQL简单,而且,SQL是数据库中的标准语言,任意一个数据库产品都提供SQL解释器(当然界面可能粗糙一点),但对于HQL,我不晓得是不是有HQL解释器可以进行测试。而且,不同的数据库均提供不同的SQL函数及扩展语法,以实现更为丰富的功能,例如在SQL Server中,我可以使用扩展的update语法进行多表关联修改,而对于HQL,我不清楚是不是能够实现所有能在SQL中实现的功能。对于多表关联查询,如果关联的表比较多,无论是写还是看HQL,简直就是厄梦。对于我,我觉得缺少一个我要使用HQL的理由。

        我遇到过的使用Hibernate的程序员,在查询时都是习惯载入整个对象,而不是载入只用到的列,可能他们从不在乎效率的问题吧。我在做开发时经常做一些大表关联,例如,8张表关联,每张表的列数超过100,那么使用这种方式返回的结果集要有800列!Faint,啥,你说我列数太多,套用经典名言,这100列只是起步,要不是数据库限制,建个500列的表也属正常。

        对于删除操作,Hibernate的处理比较鸡肋,不过有一个比较有趣的现象就是,我碰到一些只用Hibernate不用SQL的程序员,他们在处理删除多条记录的情况是,通常模式是先load每个要删除的对象,再对每个对象调用delete方法,而对于SQL程序员,只是一条简单的SQL而已。我不晓得这是不是用Hibernate造成的思维定势,使得他们使用这种既没效率,也谈不上多少可读性的写法。

        以上只代表本人观点。

你可能感兴趣的:(我对Hibernate的看法)