【Java基础】Hibernate之360度环视

来源:互联网 发布:下载枪林弹雨刷枪软件 编辑:程序博客网 时间:2024/06/07 09:47

    在介绍Hibernate之前,先介绍一下JDBC,Java Data Base Connectivity——Java数据库连接,是一种用于执行SQL语句的Java API,是一套访问数据库的标准,提供了一组接口,可以为多种关系数据库提供统一访问,是Java语言访问数据库用到的东西。

    短短几句说完JDBC回来继续说Hibernate,Hibernate是当今很流行的一个ORM框架,是JPA的一个实现,完了,说说又得说说ORM和JPA。先说ORM,Object Relation Mapping对象关系映射,是对象持久化的核心,ORM是对JDBC的封装,从而解决了JDBC的各种存在问题。

    ORM具体是怎么实现的呢?


    继续说一下JPA,即Java Persistence API,是Java持久化API,是sun公司在Java EE5.0规范中提出的Java持久化接口,记住这两个字“接口”,对滴,JPA规范本质上就是一种ORM规范,但不是ORM框架,因为JPA并未提供ORM的实现,它只是制定了一些规范,提供了一些编程的API接口,但具体的实现则由服务器厂商来提供实现。JPA作为一种规范,只是提供一些接口。Jboss服务器底层就以Hibernate作为JPA的实现。所以,Hibernate除了作为ORM框架之外,它也是一种JPA实现。

    所以我们可以这么理解,JPA是接口,Hibernate是实现,ORM是一种技术。搞清楚Hibernate和ORM、JPA的关系,我们继续回来看Hibernate.Hibernate主要用来实现Java对象和表之间的映射,完成自动创建表的过程。除此之外还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是解放开发者~通常的~数据持久化相关的编程任务~的95%(这句话比较绕啊,就是有关于数据持久化编程的任务,Hibernate要解放其95%的工作量。这里又涉及到了"数据持久化"这个抽象的名词,我们来解释一下哈。所谓数据持久化,就是将内存中的数据模型转换为存储模型、以及将存储模型转换为内存中的数据模型的统称。也太绕了,通俗点儿,就是把内存中的数据写入或从磁盘上恢复,这样的一个过程的统称叫做数据持久化。)所以,这么一解释,是不是就明白了Hibernate是干什么的了??

    下面我们看几个Hibernate的结构图。这是一个最简单的Hibernate结构图。

    然后进一步分解


    还没有分彻底,再进一步分解


    现在你再来看这张图,来说说整个Hibernate的大致组成部分。

    SessionFactory(org.hibernate.SessionFactory):针对单个数据库映射关系经过编译后的内存镜像,是线程安全的,不可变的,它是生成Session的工厂,本身要用到ConnectionProvider

    Session(org.hibernate.Session):表示应用程序与持久存储层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。

    Transaction(org.hibernate.Transaction):应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。

    ConnectionProvider(org.hibernate.connection.ConnectionProvider):生成JDBC连接的工厂,有连接池的作用,它通过抽象将应用从底层的Datasource或DriverManager隔离开。仅供开发者扩展、实现用,并不暴露给应用程序使用。

    TransactionFactory(org.hibernate.TransactionFactory):生成Transaction对象实例的工厂,仅供开发者扩展、实现用,并不暴露给应用程序使用。


    下面说一下配置Hibernate的两个配置文件xxx.cfg.xml和xxx.hbm.xml它们包含的内容。

    xxx.cfg.xml主要包含以下配置:1、与DB的连接;2、可选配置;3、资源文件注册;4、二级缓存

    xxx.hbm.xml主要包含以下配置:1、类和表的映射;2、主键的映射;3、类的属性和DB中字段的映射;4、关系的映射。注意:这个xxx.hbm.xml它是和实体类对应的,是映射到数据库的映射文件。而在xxx.cfg.xml中配置的是与数据库等的连接。也就是xxx.hbm.xml这个映射文件是通过xxx.cfg.xml这个配置文件映射成功的。


    限于篇幅的原因,这篇博客就先到这里,下篇博客会继续介绍一下Hibernate的缓存机制以及延迟加载问题。敬请期待。最近这段时间都会持续更新关于Java基础以及在项目中涉及到的各种技术,欢迎在下方留言!

1 0
原创粉丝点击