Hibernate进化史-------Hibernate概述

来源:互联网 发布:python 多进程 oracle 编辑:程序博客网 时间:2024/05/10 04:29

一、Hibernate概述

       什么是Hibernate呢?首先,Hibernate是数据持久层的一个轻量级框架,实现了ORMapping原理(Object Relational Mapping)。

      在说hibernate之前,简单说一下什么是ORM。

      ORMapping基本对应规则:(这是查到的一些资料,有些规则,还没有考究)

      1:类跟表相对应

      2:类的属性跟表的字段相对应

      3:类的实例与表中具体的一条记录相对应

     4:一个类可以对应多个表,一个表也可以对应对个类

     5:DB中的表可以没有主键,但是Object中必须设置主键字段

     6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系 

     7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样

 

     ORMapping的基本实现方式:

     使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。

     大家想想,我们以前是怎么做的?

    

      现在Hibernate做了什么呢??它做了下图工作

     

       

        如上图:Hibernate主要用来实现Java对象和表之间的映射,同时提供访问数据的CRUD方法,代替手工书写SQL语句的繁琐,降低拼写错误,这样在很大程度上减少了开发过程人工使用SQL和JDBC处理数据的时间。

       

     适用Hibernate的优点

     1.使用简介的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 alue(值1,值2,值3,……),而现在的做法是:save(对象)。

      2.使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。

       3.没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。  

       4.支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻 辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。

        5、消除数据库差异。(其实可以说这是ORM的优点)Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。

当然数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。

    

  

Hibernate的另一面  

        任何一个事物存在两面性,不可能十全十美,即使如此优秀的Hibernate也有自己的弱点。

        首先是Hibernate不适用的范围,有如下两点:

            1、若是大量数据批量操作。则不适合使用Hibernate。

            2、并且一个持久化对象不能映射到多张表中。

        其次是“抽象”带来的“职业病”,抽象就以为这“通用性”好。那么可想而知,对于“特殊”情况,hbibernate就不擅长了。Hibernate的特长是封装太好,所以,如果想要操作适用于某类型数据库的特性,就只能“saysorry”了。

Hibernate中核心5个接口

          1.Configuration接口:负责配置及启动Hibernate,用来创建sessionFactory

          2.SessionFactory接口:一个 SessionFactory对应一个数据源存储,也就是一个数据库对应一个       SessionFactory。SessionFactory用来创建 Session对象。并且SessionFactory是线程安全的,可以由多个线程访问SessionFactory共享。

          3.Session接口:这个接口是Hibernate中常用的接口,主要用于对数据的操作(增删改查)。而这个Session对象不是线程安全的。不能共享。

          4.Query接口:用于数据库的查询对象。

          5.Transaction接口:Hibernate事务接口。它封装了底层的事务操作,比如JTA(;java transcation architecture)所有的数据操作,比如增删改查都写在事务中。


        总结:Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过 程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。

基本的概念以及核心接口已经介绍,欲知后续,请听下回分解。欢迎指正。

1 0