Hibernate征途(二)之基础与核心

来源:互联网 发布:仿京东商城php源码 编辑:程序博客网 时间:2024/05/01 06:08

    根据我司优良传统,必然要由上向下、逐级深入,所以在钻到Hibernate细节之前,先从宏观上行欣赏一下Hibernate。为什么说是欣赏?大家可以自行查阅一下Hibernate知识外的信息,创始人和Hibernate的来源都挺有意思。

ORM

    众所周知Hibernate是ORM框架,等等,先来说一下ORM,即Objcect Relation Mapping,对象-关系映射,我认为这是Hibernate的操作核心,这个上篇博客简单阐述了一下,学Hibernate时刻注意这点。

优缺点

    单纯地说一个框架的优缺点没什么用处,但是当结合使用时,知道其优缺点可以将其优势最大化,同时避免使用上的错误或不当。

    优点

  • 减少了代码:框架封装了一些常用的增删改查,减少代码的同时,也意味着减少了代码的维护。
  • 更加专注:使用面向对象的思想操作数据库,使得开发人员可以不再或减少对数据库表的注意。
  • 容易移植:因为Hibernate是轻量级的框架,与容器、环境无关,使得它容易移植。
  • 容易测试:相对于传统的sql语句,存在于程序中,使得它更容易测试、调试。

    缺点

  • 大量数据库特性使用:hibernate的CRUD操作,半壁江山是以session的save()\load()等实现,而这些不支持数据库特性,hql支持也有限度,况且如果使用,与hibernate容易移植的有点也相悖。
  • 大批量数据操作:当大批量操作数据时,需要大量的更新缓存,很有可能导致内存溢出(缓存部分讲解)。

基本组件

    对应用程序而言,其Hibernate组件可以分为四部分:

  • 实体类:数据持久单位,以对象的格式保存数据。
  • 映射文件:O到R的转换规则,属性到字段、对象到表的映射。
  • 配置文件:对Hibernate整体的配置内容,如数据库、用户名等。
  • 辅助工具:hibernate及引用的工具包等。

核心接口

    来看一张图:

    

    Interceptor和UserType不熟悉,主要来说一下在开发中常用的另外5个核心接口:Configuration、SessionFactory、Session、Transaction、Query。

  • Configuration,在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
  • SessionFactory,负责初始化Hibernate,创建session对象,它是线程安全的。
  • Session,负责执行持久化对象的CRUD操作,它不是线程安全的,当然,这个session不同于Web开发中的session
  • Transaction,负责事务相关的操作,可用可不用。
  • Query,支持HQL和SQL语句进行数据库操作。

三种状态

    理解Hibernate的三种状态,可以更好的理解Hibernate运行机制,在此简单说明一下,会在后续博客中详细说明。一个对象在Hibernate中呈现的状态,可以分为三种,瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。看图:

        

    我从jvm回收和session管理两个方面来说一下这三个状态:

  • 瞬时态(Transient),我觉得之所以称之为瞬时态,是因为其刚被new出来,没有被引用,也没有纳入session管理,随时可能被虚拟机回收,可能只是瞬时存在。
  • 持久态(Persistent),称之为持久态,是因为它纳入session的管理之中,这样的对象具有数据库标识,与数据库记录相对应,可以长久存在。
  • 脱管态(Detached),如其名,以前被session管理过,但是已经脱离了session的管理,与瞬时态的唯一区别,我认为是它比瞬时态多一个标识,同样可以被jvm回收。

总结

    我能说到这里,这篇博客结束了么?淡定,以上加入了我自己的理解,不是对知识单纯地罗列,是对Hibernate一个宏观的介绍,后面的博客涉及的会是细节的部分,敬请期待.