相见恨晚
很久以前,大概从开始接触数据库开始,就闪过这样一个想法,怎么看怎么觉得数据库表和vb的类模块很像,不是么?除了vb类模块还有函数外;越往下学觉得二者越像,尤其在三层时学到实体类的概念,我去,这二者基本合体了。除了组成,还有功能上,上次学术交流,说到类和类转移耦合时可以借住第三个类,同样,当表和表关系为多对多时,我们也可以借住第三张表;类似的还有类与类之间的关系,与数据库概念设计中的实体对应关系……
之所以对着二者的关系感兴趣,是因为还有一把记忆犹新的辛酸泪:
在.NET阶段,使用EA架构考试系统时,需要将表转换为实体类,当时50个表大概用了半上午,各种枯燥无味,当时一再想为什么没有类——表转换?再后来找到一款自动转换工具,为此还专门写了篇博客《数据库表转换为实体类》。
但疑问一直存在,二者如此相似,竟没有内在的关系?
直到遇到Hibernate,相见恨晚。
Hibernate
说正题,在我看来,Hibernate是JDBC的一种补充方案,它的高明之处在于,对象与对象之间的关系可以与表与表之间相互映射。如果把程序分为代码和数据两部分,从代码的角度来看,它将数据库操作转换为一种对象操作,即操作对象的增删改查,即可映射到数据的增删改查。
但是使用Hibernate有什么好处?
我的理解是,对象的操作即是面向对象的核心,可以用面向对象的思想操作数据,这样可以把更多的精力用于对程序质量的控制上,而不用分心于数据的操作,同样,与JSP之于UIer的作用类似,可以让不同位置的开发人员“术业有专攻”,提高开发效率。
如上提到“Hibernate是JDBC的一种补充方案”,为什么说是一种补充方案?框架毕竟有它的限制,无法替代JDBC能进行的更复杂的操作。
总结
.NET过度封装,使得很多内部原理无法深入了解,而JAVA,由于开放,已经给了我很多惊喜,Hibernate也是一个。
接下来,我会把Hibernate学习过程写成一个系列《Hibernate征途》,敬请期待。