
第1章 Java对象持久化技术概述
1.1 应用程序的分层体系结构
应用程序的三层结构:
表述层:提供与用户交互的界面。包括GUI界面(图形用户界面)和WEB页面。
业务逻辑层:实现各种业务逻辑。包括Java应用的持久化层,负责数据访问。
数据库层:负责存放和管理应用的持久性业务数据。
层与层之间存在自上而下的依赖关系。每个层都向上公开接口,封装实现细节。
Hibernate中间件,可以为任何一个需要访问关系数据库的Java应用服务
1.2 软件的模型
概念模型,处于软件分析阶段。概念模型显示了问题域中的实体(定义了实体的属性和实体的关系)
关系数据模型,处于数据库设计阶段,面向关系。关系数据模型是从概念模型基础上建立起来的。一个实体对应一个表,表通过主键来保证每条记录的唯一性,根据关系数据库学,表的主键应当不具有任何业务含义。
域模型,处于软件设计阶段,面向对象。域模型是从概念模型基础上建立起来的。包括域对象和域对象之间的关系。
域对象(Domain Object)即业务对象(Business Object, BO):
实体域对象,采用JavaBean形式的实体域对象即POJO(Plain Old Java Object)。如订单、商品等。
过程域对象,代表应用中的业务逻辑或流程。通常依赖于实体域对象。例如发出订单、登录应用等。
事件域对象,代表应用中的事件。通常由系统中的某种行为触发。例如异常、警告或超时等。
域对象都位于业务逻辑层,实体域对象是应用的业务数据在内存中的表现形式,过程域对象用于执行业务逻辑。
域对象之间的关系:
关联(Association)关系,关联指类之间的应用关系,分为一对一、一对多、多对多关联。如果类A与类B关联,那么被引用的类B被定义为类A的属性。
依赖(Dependency)关系,依赖指类之间的访问关系。如果类A访问类B的属性或方法,或者类A负责实例化类B,那么可以说类A依赖类B。
聚集(Aggregation)关系,聚集指整体与部分之间的关系。对于聚集关系,聚集类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失时,聚集部分就随之消失。例如人和手就是聚集关系。
一般化(Generalization)关系,一般化指类之间的继承关系。
1.3 直接通过JDBC API来持久化实体域对象
JDBC(Java Database Connectivity)API包括:
java.sql.DriverManager :驱动程序管理器,负责创建数据库链接
java.sql.Connection :负责数据库链接
java.sql.Statement :负责执行SQL语句
java.sql.PreparedStatement :负责执行预定义SQL语句
java.sql.ResultSet :负责SQL查询语句的查询结果集
程序中的业务逻辑和数据访问细节分离的模式:
业务逻辑和数据访问耦合、ORM模式、主动域对象模式、JDO模式、CMP模式
1.4 ORM模式简介
对象-关系映射(Object-Relation Mapping, ORM)模式指在单个组件中负责所有实体域对象的持久化,封装数据访问细节,采用对象-关系映射文件(.XML)映射元数据来描述对象-关系映射细节。
一个持久化类和一个表对应,类的每个实例对应表中的一条记录。
ORM模式执行SQL语句的步骤:
1、运用Java反射机制,获得customer对象的类型为Customer.class
2、参考对象-关系映射元数据,Customer类对应CUSTOMER表
3、根据映射信息,生成SQL语句
4、调用JDBC API,执行SQL语句
ORM中间件Hibernate,http://www.hibernate.org/
1.5 实体域对象的其他持久化模式
主动域对象模式
主动域(实体域)对象,在实现中封装了关系数据库模型和数据访问细节。在实体域对象中封装自身的数据访问细节,在过程域对象中完全负责业务逻辑。此时整个应用为三层应用结构:表述层、业务逻辑层、数据库层
JDO模式
(Java Data Objects, JDO)——SUN公司制定的描述对象持久化语义的标准API。此时整个应用为四层应用结构:表述层、业务逻辑层、持久化层(JDO API、JDO 实现、JDBC API)、数据库层
CMP模式
由EJB容器来管理实体EJB的持久化,EJB容器封装了对象-关系的映射和数据访问细节。
EJB组件分为会话EJB(实现业务逻辑)、实体EJB(代表业务实体)
实体EJB分为基于BMP(Bean-managed Persistence)的实体EJB(由EJB实现本身的数据访问细节)、基于CMP(Container-managed Persistence)的实体EJB(由EJB容器实现数据访问细节)
1.6 Hibernate API 简介
提供访问数据库的操作的接口:Session接口、Transation接口、Query接口
用于配置Hibernate的接口:Configuration接口
Hibernate核心接口:
Configuration接口:配置Hibernate、根启动Hibernate。Hibernate应用通过Configuration实例来指定对象-关系映射文件的位置或动态配置Hibernate的属性,然后创建SessionFactory对象实例。
SessionFactory接口:初始化Hibernate、充当数据存储源的代理、创建Session对象。
一个SessionFactory实例对应一个数据存储源,Hibernate应用从SessionFactory中获得Session对象实例。
特性:它是线程安全的,意味着同一个实例可以被应用的多个线程共享;它是重量级的,意味着不能随意创建或销毁实例,一个数据库访问只需创建一个实例。
Session接口:负责保存、更新、删除、加载、查询对象
Session接口被称为持久化管理器,每个Session实例都有自己的缓存,用来存放被当前工作单元加载的对象且只能被当前工作单元访问。
特性:它不是线程安全的,应该避免多个线程共享同一个Session实例;它是轻量级的,意味着创建或销毁实例不需要消耗太多的资源,可以为每个请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
Transation接口:Hibernate的数据库事务接口,对底层的事务接口做了封装
封装的底层事务接口:
JDBC API、JTA(Java Transation)API、CORBA(Common Object Request Broker Architecture)API
通过一致的Transation接口来声明事务边界,有利于应用在不同环境或容器中移植。
Query接口和Criteria接口:执行数据库查询,控制执行查询的过程。
Query接口封装了一个面向对象的查询语句(Hibernate Query Language, HQL)
Criteria接口封装了基于字符串形式的查询语句,擅长于执行动态查询。
回调接口:Interceptor接口、Lifecycle接口、Validatable接口
当一个对象发生了特定的事件(如加载、保存、更新、删除),Hibernate应用可以通过回调来响应事件。
回调接口按实现方式可分为:
Lifecycle接口和Validatable接口:由持久化类来实现接口。
Lifecycle接口,使持久化类的实例能响应被加载、保存、删除的事件。
Validatable接口,使持久化类的实例在被保存前进行数据验证。
Interceptor接口:不必由持久化类来实现接口。Interceptor实现类负责响应持久化类的实例被加载、保存、更新、删除的事件。
映射类型接口:Type接口、UserType接口、CompositeUserType接口
Type接口,表示Hibernate映射类型,用于把域对象映射为数据库的关系数据。
Type接口的实现类:PrimitiveType类,映射Java基本类型。DateType类,映射Java日期类型。
扩展接口:
定制主键的生成策略:IndentifierGenerator接口
定制本地SQL方言:Dialect抽象类
定制缓存机制:Cache接口、CacheProvider接口
定制JDBC连接管理:ConnectionProvider接口
定制事务管理:TransationFactory接口、Transation接口、TransationManagerLookup接口
定制ORM策略:ClassPersister接口及其子接口
定制属性访问策略:PropertyAccesser接口
创建代理:ProxyFactory接口
定制客户化映射类型:UserType接口、CompositeUserType接口。
from http://hi.baidu.com/computertao/blog/category/%D1%A7%CF%B0%B1%CA%BC%C7
Tags: Hibernate java MVC 笔记
原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.net/csdn/
本文链接地址:http://www.busfly.net/csdn/post/529.html
如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~