持久化:
自从学习Hibernate以来,这个词是见得最多的一个词了。我觉得有时候想问题不要太复杂了,所谓的持久化就是将项目中产生的各种数据存到数据库中去,就是这么简单。
持久层就是将数据写入到数据库中去,以及从数据库中读数据。
现在的企业级项目不都是基于数据库么,而现在主要还是以关系型数据库为主。如果把项目和项目中使用的数据库剥离开来,那么项目就像一个工厂一样,既需要从外部购买原材料然后存放到原料仓库中去;同时有需要从仓库中拿出原材料进行加工,生产出产品并将其存放到产品仓库中。
所以我觉得数据库既充当了一个原料仓库,又充当了一个产品仓库,持久化就是存和取的过程。至于为什么需要Hibernate呢?那是因为"产品(数据)"的规格不一样啊。项目是用面向对象的语言开发的,运行在项目中各种数据都是以对象的方式存在的;众所周知,关系型数据库是基于关系模型而提出来的一种存储数据的方式,数据的读写是基于关系型数据库所提供的SQL语句的。单说关系性数据库,通过SQL语句查询出来的数据的形式都是一行行的记录,这些记录都相同的字段。以java为例,java中与数据库交互用的是JDBC,JDBC接口去数据库中查出来的数据是封装到ResutlSet集合中。ResultSet只是对SQL查询出来的数据做了很浅层次的一个封装,真正要拿过来在项目中跑动,我们还得自己新建一个对象,然后通过get/set方法进行封装一下。
说起来好像也不难,的确是不难,就是封装一下而已嘛。但是java对象中的属性除了基本数据类型还有引用类型呢?引用类型对象里面指不定还有引用数据类型呢,引用数据类型不仅有单个引用,还有对集合的引用呢!就简单的商城项目来说,一个客户有多个订单,每个订单有多个明细,每个明细有对应着一个商品,这四个对象之间有三层的关联呢?之前我也用JDBC来试了一下,而且中间还用了一些第三方的小工具,做起来很繁琐,而且代码重用性不高。学了一点Hibernate之后,发现Hibernate确实很方便,几乎不用写表之间进行关联的代码。
说道这里,Hibernate做了两个方面的映射,一个方面是将编程语言中的对象和关系型数据库中的记录进行映射,另一方面是将对象之间的引用关系和数据库表之间的关联关系进行映射,这两个映射就好像一个大飞机的说明书,一种说明书是,每个部件是如何组装的;而另一种说明书规定了不同部件之间是如何组装的。在Hibernate中的映射文件也可以分两部分,一部分是对象内的属性到数据库字段的映射,另一部分则是对象引用到表之间关联的映射。Hibernate就是拿着我们提供的说明书到"仓库"中帮我们存取我们想要的"货物"。因此,开发者与数据库之间的关系也就是那几个映射文件的关系,Hibernate和数据库之间就透明的缠到了一起,有种老婆被抢走的感觉。
再说Hibernate的配置,我感觉我有点强迫症,学东西老是希望都学个干干净净的,但是就三个框架SSH来说,我觉得Hibernate最繁琐,里面细小的知识点很多,配置也多。(现就写这点感受吧,有时候还真是想写点东,比如“我们学框架究竟是在学什么”)。