hibernate基础学习

来源:互联网 发布:专利公司 知乎 编辑:程序博客网 时间:2024/06/06 23:40

一、Java应用分层结构

软件开发过程中逻辑分层:表述层、业务逻辑层、数据库层。

       业务逻辑层不仅负责业务逻辑,而且直接访问数据库,提供对业务数据的插删改,为了把数据访问和业务逻辑分开,把数据访问作为单独的持久化层。持久化层封装了数据访问细节,为业务逻辑层提供了面向对象的API,代码可重用性高,能支持多种数据库平台,透明不影响上层的实现。

       hibernate是一种开放源代码的ORM软件,ORM软件具有中间件的特性。中间件是在应用程序和其他软件系统之间的连接管道。Hibernate可看成是连接Java应用和关系数据库的管道。中间件具有很高的可重用性,对于各种应用领域都适用。hibernate可以为任何一个需要访问关系数据库的Java应用服务,无须关心它是如何实现,只需要知道如何访问接口就行。


二、软件模型

      概念模型用来模拟问题域中的真实实体,描述了每个实体的概念和属性,以及实体之间的关系,这个阶段并不描述实体的行为。

      关系数据模型在概念模型的基础上建立起来,用于描述这些关系数据的静态结构。通常一个实体对应一个表。

     域对象(Domain Object)即具有状态和行为的对象,构成域模型,是对真实世界实体的软件抽象。域对象可以代表业务领域中的人、地点、事物、概念和业务。分为以下几种:

        1.实体域对象:代表人、地点、事物或概念。可以作为包含状态和行为的JavaBean,也称为POJO(Plain Old Java Object)。

        2.过程域对象:代表应用中的业务逻辑或流程,通常依赖于实体域对象,可以把业务领域中的动词作为过程域对象。

        3.事件域对象:代表应用中的一些事件,通常由系统中的某个行为触发。

     域对象的持久化概念

     业务数据有两种表现形式:在内存中表现为实体域对象,以及实体域对象之间的各种关系。在关系数据库中表现为表,以及表与表之间的参照关系。Java程序在内存中创建了实体域对象后,不可能永远存在,必须持久化到数据存储设备中。一旦被持久化,就可以再应用程序再次运行时重新读入到内存,重新构造出域对象。hibernate本身是具有冬眠的意思。

 

三、Java对象持久化技术

     ORM采用映射元数据来描述对象-关系的映射细节,使得ORM中间件能在任何一个Java应用的业务逻辑层和数据库层之间充当桥梁。

    

       ORM解决的主要问题是对象和关系的映射。域模型和关系数据模型都分别建立在概念模型的基础上。域模型面向对象,而关系数据模型面向关系。一个持久化类和一个表对应,类的每个实例对应表中的一条记录。ORM中间件采用各种映射方案,来建立两种模型之间的映射关系。

       ORM中间件采用元数据来描述对象-关系映射细节,元数据通常采用XML格式,并且存放在专门的对象-关系映射文件中。如果希望把ORM软件集成到自己的Java应用中,用户首先要提供对象-关系映射文件。 只要提供了持久化类与表的映射关系,ORM中间件在运行时就能参照映射文件的信息,把域对象持久化到数据库中。


四、Hibernate AP简介

      API接口可分为以下几类:

     1.提供访问数据库的操作的接口,包括Session、Transaction、Query

     2.用于配置Hibernate的接口:Configuration

     3.使应用程序拦截Hibernate内部发生的事件,并做出相关的回应,包括Interceptor、LoadEventListener和SaveEventListener接口。

     4.用于扩展Hibernate的功能的接口,如UserType、CompositeUserType和IdentifierGenerator接口。

  

     Hibernate的核心接口:

    1.Configuration:配置Hibernate、根启动Hibernate,创建SessionFactory对象

    2.SessionFactory:初始化Hibernate,充当数据存储源的代理,创建Session对象。线程安全的,同一个实例可以被应用的多个线程共享。是重量级的,需要很大的缓存,用来存放预定义的SQL语句和映射元数据等。不能随意创建或销毁实例。访问每个数据库只创建一个SessionFactory实例,在应用初始化的时候创建。

    3.Session:保存、更新、删除、加载和查询对象。

    4.Transaction:管理事务。对底层的事物接口做了封装,包括JDBC API、JTA(Java Transaction API)、CORBA API。

    5.Query和Criteria接口:执行数据库查询

     

五、开发Hibernate基本流程



初始化配置Hibernate:

Configuration confg=new Configuration();config.addClass(Customer.class);sessionFactory=config.buildSessionFactory();


初始化过程结束后,就可以调用SessionFactory实例的openSession()方法获得Session实例,然后通过它执行访问数据库的操作。Session接口提供了操纵数据库的各种方法:

      save(), update(), delete(), load()或者get()。


Session是一个轻量级的对象,通常将每一个Session实例和一个数据库事物绑定,每执行一个数据库事物,就应该先创建一个新的Session实例。如果事务执行过程中出现异常,应该撤销事物,不论事物执行成功与否,最后都应该调用Session的close()方法,释放Session实例占用的资源。以下是实例:

Session session=factory.openSession();Transaction tx;try{   tx=session.beginTransaction();   //执行事务   ...   //提交事务   tx.commit();}catch(RuntimeException e){    if(tx!=null) tx.rollback();    throw e; }finally{    session.close();}

0 0
原创粉丝点击