一、Hibernate原理
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
struts、hibernate、spring这几个框架中,hibernate是实现起来最复杂的了。
最典型的三层架构图:
层和层之间是单向依赖的,上层依赖于下层,不要产生下层依赖于上层的结果。而且都依赖于抽象。这样就得到了上层不知道下层的修改和上层不因下层的改变而改变的效果。
如上图中,画一条横线,上面是对象方面的领域;下面是关系方面的领域。
表示层使用Struts框架进行代替,主要负责表示层相关的处理,包括页面流转、通过ActionForm对表示层传过来的类型均为字符串的数据的转换成相应的类型,国际化的一些相关支持,等等。
hibernate处于持久层,
持久层的逻辑大部分写的都是jdbc语句,现在可以使用hibernate代替,就不用再写insert、update、delete、select这样的语句了。直接操纵hibernate就保存了。
hibernate仍然通过jdbc和数据库打交道。hibernate就是又对jdbc进行了一层包装。它充当程序和数据库的桥梁,
直接通过hibernate对数据库进行操作。
ORM——对象关系映射:把实体对象放在对应的关系型数据库中,查询的时候将数据从关系型数据库中拿出放到对应的实体对象中。hibernate做的就是这些工作,提供了一系列配置文件,将这些工作做的更加灵活一些,使用的时候配置一下就可以了。其实就是对O(对象)和R(关系)的一个映射,所以这个框架我们称作ORM——对象关系映射。
hibernate可以根据对象自动生成数据库。把数据库屏蔽掉,使用户不知道有数据库相关的东西了。这样的话对于用户来说,操纵的就是对象,不在接触关系型这样的领域了,所以看到的只有对象。使用hibernate之后使开发更加面向对象了。比如插入一条语句,以前是用insert关键字,现在只使用save就保存了。
二、hibernate优缺点
hibernate的优点:
——提高生产力;
——使开发更加对象化(解决了阻抗不匹配的问题);
——可移植性;
——测试简单,没有侵入性,支持透明持久化;
阻抗不匹配:关系领域和对象领域存在一个不匹配的概念。关系领域和对象领域分别有不同的概念。简单举例:对象领域中有继承,继承是面向对象领域中的核心概念,在关系领域中是没有的。所以当这两个模型进行映射的时候,这种概念很难和关系型模型进行匹配,而hibernate解决了这个问题。
hibernate的缺点:
具体解释:因为hibernate封装的很彻底,所以使用数据库的一些特性,如数据库的存储过程,数据库的特性调优,就不方便了。
——使用数据库特性的语句,将很难调优;
——对大批量的数据库更新存在问题;
——系统中存在大量的统计查询功能;
统计查询一般使用jdbc来做,所以,有时候项目中使用hibernate和jdbc结合使用。
使用hibernate可以使我们采用对象化的思维操作关系型数据库,使用hibernate开发使面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)更加一体化。