`

Hibernate学习笔记之基本概念

    博客分类:
  • J2EE
阅读更多

1.       实体域对象:通常实体域对象与数据库表中的记录对应,可以为每个实体域对象分配唯一的一个OID(Object Identifier 对象标帜符),OID是关系数据库的主键,通常是代理主键在实体域对象中的等价物。

2.       过程域对象:

3.       事件域对象:由系统中其他功能所出发的异常、警告或超时等信息。

4.       关联(Association):关联指的是类之间的引用关系,是实体域对象之间最普遍的一种关系,关联可以分为一对一、一对多和多对多。

5.       依赖(Dependency):指的是类之间的访问关系,如果A类访问B类的属性和方法,或者A类负责实例化B类,可以说A类依赖B类,和关联关系不同,无需把B类定义为A类的属性。依赖在实体域对象之间是不常见的,但是过程域对象往往依赖实体域对象,因为过程域对象会创建实体域对象。或者会访问实体域对象的方法和属性。

6.       聚集(Aggregation):聚集关系与关联关系在类的定义上有相同的形式,不过两者有不同的语义,对于聚集关系,部分类的对象不能够单独存在,他的生命周期依赖于整体类对象的生命周期,当整体消失时,部分也随之消失,而对于存在关联关系的两个类却允许各自的对象单独存在。聚集关系与关联关系的语义区别是通过业务逻辑来保证的。通常由过程域对象来实现。在ORM中间件的四层应用中,可以在对象-关系映射文件中采用不同的映射元数据来区分两种关系。

7.       一般化(Generalization):通常指的是类之间的继承关系。

8.       持久化过程:

增加:把域对象永久保存到数据库

删除:从数据库中删除一个域对象

修改:更新数据库中域对象的状态

查询:把符合条件的一个或多个对象从数据库加载到内存中

加载:根据特定的OID,把一个域对象从数据库加载到内存中

9.       ORM模式(Object-Relation Mapping):指的是在单个组件中负责所有实体域对象的持久化,封装数据访问细节。

ORM持久化方法:

1)  为每一种可能的数据库访问操作提供单独的方法。

缺点: 

²        持久化层产生大量冗余代码

²        持久化层缺乏弹性

²        持久化层同时与域模型和关系数据模型绑定

2)  采用映射元数据来描述对象-关系的映射细节,使得ORM可以在业务逻辑层和数据库层之间承担桥梁的作用。

10.   对象的删除操作:

1)运用反射机制或得对象的类型

2)参考对象-关系映射元数据,获取对象关联信息

3)自动生成DML语句

4)调用JDBC API执行以上SQL

说明:事实上,Hibernate在初始化阶段就会根据映射信息预定义一些增删改查的SQL语句,这些语句存放在SessionFactory的缓存中,当执行删除操作时直接进行调用就可以了。

11.   其他持久化模式:主动域对象模式、JDO模式、CMP模式

主动域对象模式:

优点:

²        实体域负责数据访问细节把业务访问细节交给过程域完成

²        当关系模型发生改变时,只需修改主动域对象的代码不需修改过程域对象的业务方法

缺点:

²        实体域对象的实现中仍然包含SQL语句

²        每个实体域对象都负责自身的数据访问实现,将这一职责分散到多个对象中,这会导致实体域对象重复实现一些共同的数据访问操作从而造成重复编码。

JDO模式:支持把对象持久化到任意一种存储系统中:关系数据库、面向对象的数据库、基于XML的数据库和其他专有存储系统。

CMP模式:

缺点:

²        必须遵循J2EE规范

²        只能运行在EJB容器中

²        对于复杂的与模型,EJB提供的对象-关系映射能力很有限。

²        由于不同厂商生产的CMP引擎差异很大,对象-关系映射元数据也各不相同导致可移植性很差

12.   Hibernate API说明:

提供操作数据库的接口,包括:Session、Transaction和Query

用于配置Hibernate的接口:Configuration

回调接口,是程序接受Hibernate内部发生事件,并做出相关回应,接口包括:Interceptor、Lifecycle和Validatable

用于扩展Hibernate的功能接口,UserType、CompositeUserType和IdentifierGenerator,如果需要的话应用程序可以扩展这些接口。

13.   Hibernate的5个核心接口:

²      Configuration接口:配置和启动Hibernate,创建SessionFactory对象

java 代码
  1. private static final SessionFactory sessionFactory;   
  2. static {   
  3.     try {   
  4.         // Create the SessionFactory from hibernate.cfg.xml   
  5.         sessionFactory = new Configuration().configure().buildSessionFactory();   
  6.     } catch (Throwable ex) {   
  7.         System.err.println("Initial SessionFactory creation failed." + ex);   
  8.         throw new ExceptionInInitializerError(ex);   
  9.     }   
  10. }   
  11.   
  12. public static SessionFactory getSessionFactory() {   
  13.     return sessionFactory;   
  14. }   


 

²      SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象

java 代码
  1. Session session=HibernateUtil.getSessionFactory().getCurrentSession();  

 

java 代码
  1. session.beginTransaction();   
  2. session.delete(persistentInstance);  


 

²      Transaction接口:管理事务

java 代码
  1. session.getTransaction().commit();  

 

java 代码
  1. String strSQL="select p from Person p left join fetch p.events where p.id = :pid";   
  2.   
  3. Person aPerson=(Person)session.createQuery(strSQL).setParameter("pid",personId).uniqueResult();   


 

 

²      Query和Criteria接口:执行数据库查询²      Session接口:负责对象的增删改查和加载操作
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics