SSH——Hibernate阶段总结(二)



      hibernate基于JDBC的一个成功框架,以配置实现数据库连接、表以及表间关联关系的创建,将实体对象化,以实现数据的CRUD,作为一个轻量级ORM框架,hibernate最为突出的特点即在于:配置灵活,操作简易。下面我们通过简单总结hibernate 4大基础:实体关系映射、hql语句、缓存、JPA注解,进一步体会这个框架的简易灵活之处。笔者在之前的博客中,已经详细解析了关于实体关系映射、JPA注解的使用,故此篇博文仅作为总结,概括目前笔者对hibernate的认识。

SSH——Hibernate阶段总结(二)_第1张图片 

一、环境搭建

从零开始创建一个hibernate项目:

1、引入依赖jar包

* HIBERNATE_HOME/lib/*.jar --lib下所有jar

* HIBERNATE_HOME/hibernate3.jar  --hibernate核心jar包

* 加入数据库驱动(mysql驱动)

2、提供hibernate.cfg.xml文件,完成基本的配置

最好加入如下配置项,用于在控制台输出hibernate sql语句:

true

true

3、建立实体类和对应hbm.xml文件,并将实体映射文件配入hibernate.cfg.xml中

4、加入log4j配置文件,将该配置文件拷贝到src下,便于程序的调试

简单的4步,便轻松搭建好了hibernate运行环境。

二、实体关系映射

实体关系映射是hibernate框架的点睛之笔,也是灵活的核心体现;通过hibernate特有的配置标签,通过简单的配置之后,即可实现实体间各种关联关系,例如:一对多,多对多,继承,聚合等;创建实体映射的同时,编写配置文件读取程序,便可将整个项目的表、表关系创建完毕。实体关联映射的相关细则,请查阅博主之前的博客总结。

所以配置灵活,通过标签配置实体映射,进而创建出整个数据库表结构,不得不承认,这种思想实现是很了不起的封装。

三、hql查询语句

面向对象的核心思想:基于对象进行编程,hibernate也充分的实践了oo核心,将每一实体视为对象,利用与该对象所对应的配置文件,创建与数据库表的对应映射,利用特有的hql语句,对实体对象进行增删改查,隔山打虎,实则实现了对数据库的增删改查操作。

当然,在hql中也有针对于属性、实体对象等不同查询类型,不同之处即在于返回值,或是属性,或是整个实体,可根据项目选择使用。

四、缓存

缓存的使用立足点在于优化,Hibernate是一个持久层框架,经常访问物理数据库。

为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能,故使用缓存将经常访问的数据存放到缓存中,以减少数据库的访问,

Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。

一级缓存又称为session级缓存,生命周期很短,同session生命周期一致,一个session关闭意味着缓存数据释放。Hibernate load ,get方法均支持一级缓存。第一次执行时发出sql语句,查询结果存入缓存中,之后的读取便不再发出sql访问数据库,而是通过读取缓存中的数据。

二级缓存又称为sessionFactory或进程级缓存。它的生命周期同应用程序的整个过程对应,程序关闭二级缓存数据才得以释放。二级缓存的实现一般通过成熟的缓存产品来做,对存放其中的数据也有一定的要求,因为二级缓存是供整个进程访问的,而进程里可能还存在多个一级缓存,所以二级缓存的使用必须考虑到并发访问的问题,例如session1,session2 同时访问sessionFactory 二级缓存,不做特殊处理便会出现数据不同步问题。

什么样的数据适合存放到第二级缓存中?   
          1) 很少被修改的数据   
          2) 不是很重要的数据,允许出现偶尔并发的数据   
          3) 不会被并发访问的数据   
          4) 常量数据   
     不适合存放到第二级缓存的数据?   
         1) 经常被修改的数据   
         2) 绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发   
         3) 与其他应用共享的数据。

五、注解

注解的使用毋庸置疑,很大程度上减少了个实体配置文件的编码工作,只利用简单的@Entity 便可创建出实体对应表结构,@id @GeneratedValue   便可确定表的主键以及主键生成策略。但需要注意的是,注解虽然看起来简单,但是需要熟悉其中各种关系的配置方式,并且需要直接修改JavaBean类的代码,源码侵入性较强。各有千秋,实际运用中选择适合项目的使用即可。

所以hibernate框架,显著的优势即在于它对实体对象化的CRUD操作 和通过配置文件或注解的方式实现表间关联映射,学海无涯,不知道的还有很多。

 

 

你可能感兴趣的:(【深入Java】,【SSM架构】,SSH)