Hibernate征途(二)之基础与核心
根据我司优良传统,必然要由上向下、逐级深入,所以在钻到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对象。理解Hibernate的三种状态,可以更好的理解Hibernate运行机制,在此简单说明一下,会在后续博客中详细说明。一个对象在Hibernate中呈现的状态,可以分为三种,瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。看图:
我从jvm回收和session管理两个方面来说一下这三个状态:
瞬时态(Transient),我觉得之所以称之为瞬时态,是因为其刚被new出来,没有被引用,也没有纳入session管理,随时可能被虚拟机回收,可能只是瞬时存在。持久态(Persistent),称之为持久态,是因为它纳入session的管理之中,这样的对象具有数据库标识,与数据库记录相对应,可以长久存在。脱管态(Detached),如其名,以前被session管理过,但是已经脱离了session的管理,与瞬时态的唯一区别,我认为是它比瞬时态多一个标识,同样可以被jvm回收。我能说到这里,这篇博客结束了么?淡定,以上加入了我自己的理解,不是对知识单纯地罗列,是对Hibernate一个宏观的介绍,后面的博客涉及的会是细节的部分,敬请期待.