您的位置:首页 > 其它

Hibernate与持久化概述

2015-12-17 21:12 225 查看
hibernate作为一个成熟且强大的持久层框架,集诸多持久层设计思想之大成,是一种ORM(对象关系映射)映射工具,能建立面向对象的域模型与关系模型之间的映射。

一、分层体系结构

分层体系结构定义了实现不同关系代码之间的接口,允许关系实现方式的改变不会对其它层的代码造成重大的破坏。

同时,分层也决定了其间出现的中间层的类型。分层规则如下:

①层由上到下进行通信。每一层仅依赖于其直接的下层;

②除了其直接下层,每一层都不知道任何其它层。


二、MVC模式

在分层体系结构中,最常见、最简单也是最有效的就是MVC(Model View Control)模式了。

①表示层,即MVC模式中的V,提供与用户交互的界面。GUI和Web页面是表示层的两个典型的例子。

②业务逻辑层,即MVC模式中的C,用于实现各种业务逻辑,它相当于整个系统的大脑,负责思考数据如果取得,如何处理以及数据流向何处。

③数据库层,即MVC模式中的M,代表数据实体,也可以是数据库,负责存放和管理应用程序的持久性业务数据。


持久层是在MVC三层架构的基础上提出的。在提出持久层之前,业务逻辑层在实现业务逻辑的同时,还需要访问数据库,这为业务逻辑的扩展增加了难度。

有了持久层,业务逻辑层只需负责业务逻辑的实现,对数据的操作则交给持久层,使每一段业务逻辑代码的目的更明确,对后台数据库的改变也变得非常简单。

三、持久层的意义在于

持久层封装了数据访问细节,为业务逻辑层提供了面向对象的API

①代码可重用性高,能够完成所有的数据库访问操作

②能够支持多种数据库平台

③具有相对独立性,底层数据发生变化时,只需修改持久层代码,只要对其上层提供的API不变,则不用修改业务逻辑层的代码。


四、ORM(Object-Relational Mapping)的解决方案

①在持久化类的对象上执行基本的CRUD(添加、查询、更新和删除)操作的一组API;

②用于指定查询的一种语言或一组API,这些查询会引用类和类属性;

③用于指定映射元数据的工具;

④实现ORM的一项技术,用来与事务对象交互以完成脏读、关联数据的延迟加载和其他优化功能。


五、ORM技术的优缺点

ORM作为对象到关系的映射,具有以下优点

①提高了开发效率。

由于ORM可以自动对实体对象与数据库中的表进行字段与属性的映射,所以实际操作中已经不再需要一个专用的,庞大的数据库访问层。

②ORM提供了对数据库的映射,能够像操作对象一样从数据库中获取数据,而不用直接进行SQL编码


ORM技术的缺点

①系统结构方面。采用ORM的系统一般都是多层系统,系统层次增加了,效率就会降低

②性能方面。主要体现在对持久层的提取和对数据的加工处理上。

采用ORM时,系统可能将全部的数据提取到内存对象中,然后再进行过滤盒加工处理,这样就容易产生性能问题
③对象持久化方面。ORM一般会持久化所有的属性,这对有些应用是不希望发生的。


六、域模型

域模型是对一个真实事物的模拟实现,是抽象的结果。它可以代表业务领域中的人、地点、事物或是概念,它能够真实地反映出模型中元素之间的关系。

构成域模型的基本元素是对象,可以分为实体域对象、过程域对象和事件域对象3种。

域对象之间的关系

①关联:指类之间的引用关系

②依赖:指类之间的访问关系

③聚集:指的是整体与部分之间的关系

④一般化:指类之间的继承关系


七、常用域对象的持久化技术

①JDBC直接访问数据库。Java DataBase Connectivity standard是一个面向对象的应用程序接口
②主动域对象模式。

③ORM模式

④CMP模式(Container-Managed Persistenc)容器管理的持久化

⑤JDO模式(Java Data Object)是java对象持久化的新规范。


八、Hibernate特点如下:

Hibernate在java对象与关系数据库之间起到了一个桥梁的作用,负责两者之间的映射。在hibernate内部还封装了JDBC技术,向上一层提供面向对象的数据访问API接口。

①它负责协调软件与数据的交互,提供了管理持久化数据的完整方案,让开发者能够专注于业务逻辑的开发;

②应用者不需要遵循太多的规则和设计模式,能够灵活地运用;

③它是一个开放源代码的映射框架,对JDBC只做了轻量级的封装,让java程序员可以随心所欲地运用面向对象的思想操纵数据库,无需考虑资源的问题。


九、Hibernate核心接口

①Configuration接口

Configuration类是hibernate的入口,负责在hibernate初始化时加载默认文件路径下的配置文件信息(hibernate.properties或hibernate.cfg.xml)到计算机内存,

并通过它的对象加载指定的映射文件到内存,最后创建一个SessionFactory对象,把读入的配置信息拷贝到SessionFactory对象的缓存中。


②SessionFactory接口

SessionFactory负责创建Session实例,每个SessionFactory类的实例对应一个数据库。

SessionFactory类的实例是重量级(下面还要提到"轻量级"的概念,区分它们是根据对象占用缓存的大小)的。

因为它占用很大的缓存,用来存放预定义的SQL语句和映射元数据等,所以每个数据可最好只创建一个SessionFactory实例,在初始化时完成。

它的线程是安全的,可以被应用的多个线程共享。


③Session接口

Session是hibernate持久化操作的基础,它负责管理所有与持久化相关的操作,例如数据库的存取、事务的管理和对象的生命周期等。

Session与SessionFactory恰恰相反,它不是线程安全的,应避免多个线程共享一个Session;它是轻量级的,创建和销毁不会浪费太多的资源,可以为每个请求分配一个Session,在每次请求过程中及时创建和销毁Session实例,减少资源的浪费。


④Transaction接口

Transaction类负责hibernate的数据库事务。其实hibernate本身并不具有管理事务的能力,只是对底层事务接口进行了封装,这样做有利于在不同的环境或容器中移植,也可以直接访问底层的事务接口,但那样不利于应用的移植。


⑤Query和Criteria接口

Query和Criteria接口负责hibernate的查询操作

Query实例封装了一个HQL(Hibernate Query Language)查询语句。HQL与SQL有些类似,只是HQL是面向对象的,它操作的是持久化类的类名和该类的属性名,而SQL操作的是表名和字段名
Criteria实例完全封装了字符串形式的查询语句,它比Query实例要面向对象,它更适合于执行动态查询。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: