最近做的一个项目是基于Spring mvc + Spring + hibernate框架。楼主以前未接触过hibernate,通过最近的学习、实践和查阅资料也有了一定深度的理解。现在回过头来,打算按零基础整理出hibernate学习笔记。
一、hibernate出现的背景以及所需要的准备知识
1、web四层体系架构:
方框里面是用到的一些技术和容器。
分层的好处:解耦合,使用J2EE多层架构,在需求变更时,只需要改变与需求有关的层的代码,不需要 改动其他层和其他逻辑的代码。
由于我们的hibernate等一些持久化框架在传统的web架构里面处于业务逻辑层,下面将介绍一下业务逻辑层。
2、传统的业务逻辑层
业务逻辑层作为用户访问Internet资源库的中间层结构,处理用户的请求,为上层准备数据,实现密集的逻辑业务。其中EJB容器提供了对分布式、事务性、安全性、持久性、资源管理等支持。
然而这样业务逻辑层是有一些不足之处:
1. EJB大而全,在实际简单的应用中,显得有些过度设计和过于笨重,其中很多服务在是实际应用中并不需要或者可以用其他更简单的解决方案代替;
另外EJB的侵入式编程模型也使程序的设计丧失了面向对象性,使EJB的单元测试也变得比较用难。
2.业务逻辑层主要功能是处理业务逻辑的细节,在处理中需要频繁的访问和操作数据,如果数据库改变业务逻辑层改动会很大
改进:1.引入Spring轻量级框架,Spring使用AOP容器取代EJB容器做声明事务管理的功能。
2. 在持久性管理上用Hibernate/mybatis等框架代替 EJB的容器管理持久性(CMP)。hibernate其实也是ejb模式的一种实现方式。
3.在业务逻辑层和数据库之间增加一个中间层是很必要的。这层就是数据持久层,是对数据访问和操作的细节封装。这样当数据库发生改变,或者数据的操作发生改变时,只需 要修改数据持久层,可以避免业务逻辑层直接操作数据库,并且可以使代码的模块性,可维护性等得到增强。
直观有下图所示:
3、经典j2ee分层架构
由此j2ee的分层架构得来:表示层、业务逻辑层、持久层。
例如一个项目的架构分层图里面包含各层用到的框架技术:
由此我们可以清楚的看到所谓的持久层框架hibernate,是处于怎样的位置和作用了。
好了,通过以上介绍我们大致知道为什么要用hibernate,以及他在j2ee架构里面起到的作用。下文讲解hibernate背景知识数据持久化和ORM