Hibernate

Hibernate 是什么?从不同角度的解释:

    1、它是连接 Java 应用程序和关系数据库的中间件。

    2、它对 JDBC API 进行了封装,负责Java对象的持久化。

    3、在分层的软件架构中它位于持久化层,封装了所有数据访问细节,使业务罗基层可以专注于实现业务逻辑。

    4、它是一种 ORM(Object-Relation Mapping 对象-关系映射)工具,能够建立面向对象的域模型和关系模型的映射。

    应用程序分层体系结构:

    1、表述层:提供与用户交互的界面。

    2、业务逻辑层:实现各种业务逻辑。

    3、数据层:负责存放和管理应用的持久性业务。

    软件分层包含两种含义:

    一种是物理分层,即每一层都运行在单独的机器上,这意味着创建分布式的软件系统;

    一种是逻辑分层,指的是在单个软件模块中完成特定的功能。

    软件分层必须符合以下特征:

    1、每个层由一组相关的类或组件构成,共同完成特定的功能。

    2、层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的 API,而下层组件不应该依赖上层组件。

    3、每个层对上层公开 API,但具体的实现细节对外透明。

    软件分层的优点:

    适当的分层,将会提高软件的以下性能。

    1、伸缩性:指应用程序是否支持更多的用户。例如数据库连接。

    2、可维护性:当发生需求变化,只需修改软件的某一部分,不会影响其他部分的代码。

    3、可扩展性:在现有系统中增加新功能的难易程度。

    4、可重用性:程序代码没有冗余,同一个程序能满足多种需求。

    5、可管理性:管理系统的难易程度。

    缺点:

    1、分层越多对软件设计人员的要求越高。

    2、分层越多调试越困难。

    表通过主建来保证每条记录的唯一性,表的主键应当不具有任何业务含义,因为任何有业务含义的列都有改变的可能性。关系数据库学的最重要的一个理论就是:不要给关键字赋予任何业务意义。

    在域模型中,类之间存在四种关系。

    1、关联:类之间的应用关系。

    如果类A与类B关联,那么被引用的类B将被定义为类A的属性。关联还可以分为单项关联和双向关联。

    2、依赖:类之间的访问关系。

    如果类A访问类B的属性或方法,或者类A负责实例化类B,那么可以说类A依赖类B.

    3、聚集:整体与部分之间的关系。

    4、继承:

====================================================================================

Hibernate可以完成[对象]<=>[关系]的映射工作,也就是经常听到的Object/Relation Mapping (ORM),在没有ORM的时候,开发者需要自己开发对象到数据库的映射工作,一般来说在Java世界中是通过JDBC来实现,在.Net世界是通过 ADO.net来实现,众所周知这一项任务是繁琐耗时的,因为要在代码中内置大量的SQL语句,这使得代码的可读性和可维护性大大降低。现在, Hibernate可以为我们来做这项工作,我们只需要配置一个Mapping文件即可,剩下的所有事情就交给Hibernate吧,这样可以节省对象持 久化相关的至少30%的JDBC/ADO.net编程工作量,这是多么的令人兴奋阿。 

    1、什么是持久化层?
    企业软件架构比较流行的三层结构是大家比较熟悉的,那就是自上而下为:
    [显示表述层]=>[业务逻辑层]=>[数据库层]
这种结构中,业务逻辑层不仅负责业务逻辑,而且直接访问数据库,提供对业务数据的增、删、改、查的操作。为了把数据访问的细节和业务逻辑分开,可以把数据访问作为单独的持久化层。重新分层后自上而下变为:
    [显示表述层]=>[业务逻辑层]=>[持久化层]=>[数据库层]
这样持久化层封装数据访问细节,为业务逻辑提供面向对象的API。一个完善的持久化层应该达到以下几个目标:
    (1)代码重用性高,能够完成所有的DB访问操作;
    (2)能够支持多种数据库平台;
    (3)具有独立性,持久化层的具体实现的变化不能影响上层的实现。
正因为这几个目标的艰巨,在企业级开发中花费大量的时间,采用高级相关技术工程师去重头开发自己的持久层不是很可行的,Hibernate作为持久层中间件,它的具体实现对上层是透明的,开发者无需关系它的具体实现,只需要知道如何访问他的接口就行了。
 
    2、什么是ORM?
    ORM(Object-Relation Mapping)是对象-关系映射,当下流行的开发语言都是面向对象的,如Java,C#。 而当下流行的DB大多都是面向关系的,也就是关系数据库。这样在面向对象与面向关系之间需要一个桥梁,才能使二者协同无缝联合工作,ORM就是这个桥梁。 映射关系如下:
    [类]<=>[表]   [对象实例]<=>[表的行]   [属性]<=>[表的列]
那么这些映射关系是如何制定的呢?——只需要一个映射文件(XML)即可,在其中配置持久化类与DB表的映射关系后,ORM中间件在运行时参照此文件内容,对象持久化的DB中或把DB中数据加载到持久化类中。
    Hibernate就是一个卓越的ORM中间件。
 
    3、ORM是怎么映射的?
    要把类的属性与DB表的Field对应,ORM就必须能识别类的属性名字和数值。这就必须才用反射(Reflection)技术,相信 有一定开发经验的人对此技术都是耳熟能详了吧,当前主流开发语言都支持此技术,如Java和.net,而且具体用法都如出一辙。当然对于那些只想使用 ORM而不关心ORM的具体实现的朋友,这些内容不了解也没有任何影响。这也恰恰是ORM的好处啊。
 
    4、Hibernate采用的一个技术
    当配置为自动决定何时把对象数据写入DB的模式下,Hibernate采用了一个自动识别对象属性变化的技术。即Hibernate知道持久化类哪些属性发生了变化,然后据此来决定后便的操作。关于此技术更具体的内容,以后再详述。
 
    5、缓存
    从内存中获取数据要比从DB中获取数据快得多,所以很多ORM都采用缓存结束来提高持久化效率,Hibernate也不例外。在 Session中保留所有已经持久化的对象实例作为缓存,如果需要获取的数据在缓存中存在,则不去DB中加载。当然缓存中数据与DB中数据的一致性问题, Hibernate就是通过刚刚说过的[识别对象属性变化]的技术来实现的。
 
    6、什么是HQL?
    HQL(Hibernate Query Language)是Hibernate自己的查询语句,它与SQL相似,但是HQL是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值