Hibernate入门前的一些基本知识概念

因为最近需要负责一个项目的后台维护工作,使用的是Spring+SpringMVC+Hibernate框架,因为现在主流的是SSM框架,所以笔者对于Hibernate也是很久没有使用,所以这里开一个帖子,简单记录下载学习的过程和在学的过程中遇到的一些问题,主要还是针对Hibernate,因为相信大多数的开发人员对于Spring和SpringMVC的原理和使用已经十分的熟悉,但是对于Hibernate这个有点过时的框架的熟练程度没有那么深.....那么,就让我们一起慢慢地进步和成长吧!!!
在开始学习之前,一些必要的,繁琐的概念性的东西还是需要去了解的,这不是一个无用功的过程,这会对你了解这个框架的产生、优缺点以及特点有很大的帮助...

**首先来了解下ORM的概念**
    **ORM : 对象关系映射**
在面向对象的系统中,存在一个对象模型和关系型数据库不匹配的问题。RDBMSs用表格的形式存储数据,然而像java或者C#这样的面向对象的语言他表示一个对象关联图。
    **RDBMS的特点:**
        1,数据以表格的形式出现
        2,每行为各种记录的名称
        3,每列为记录名称所对应的数据域
        4,许多的行和列组成一张表单
        5,若干的表单组成database

在进行对象与数据库进行对应的时候,实体类中的属性与表中的字段需要进行对应,这样的话,问题也就随之出现了:
    **问题一:** 再次修改数据库比较麻烦
    **问题二:**在关系型数据库中加载和存储对象时我们哟啊面临以下五个不匹配的问题
    不匹配                       描述
     粒度      有时候你将会有一个对象模型,该模型类的数量比数据库中关联的表的数量更多。
     继承      RDBMSs不会定义在任何面向对象编程语言中本来就有的继承
     身份      RDBMSs明确定义一个sameness的概念:主键。然而,java同时定义了对象判等(a==b)和对象值等(e.equals(b))
     关联      面向对象的编程语言使用对象引用来表示关联,而一个RDBMS使用外检来表示对象关联
     导航      在java中和RDBMS中访问对象的方式完全不同

**ORM:是一个方便在关系数据库和类似于java,c#等面向对象的编程语言中转换数据的技术。一个ORM系统相当于普通的jdbc有一下的优点:**
    1,使用业务代码访问对象而不是数据库中的表
    2,从面向对象逻辑中隐藏SQL查询的细节
    3,基于JDBC的'under the hood'
    4,没必要去处理数据库实现
    5,实体是居于业务的概念而不是数据库的结构
    6,事务管理和键的自动生成
    7,应用程序的快速开发
**一个ORM解决方案由四个实体组成:**
    1,一个API来在持久类的对象上实现基本的CRUD操作
    2,一个语言或API来指定引用类和属性的查询
    3,一个可配置的服务用来指定映射元数据
    4,一个技术和事物对象交互来执行dirty checking,lazy assocition fetching和其他优化得功能

**Java ORM框架:**
    在java中有几个持久化的框架和ORM选项,一个持久化的框架是ORM存储和索引对象到关系型数据库的服务。
        Enterprise JavaBeans Entity Beans
        Java Data Objects
        Castor
        TopLink
        Spring DAO
        Hibernate
        And many more

初识Hibernate : 开放源代码的对象关系框架。
简介:它强大且高效的构建具有关系对象持久性和查询服务的java应用程序。
      Hibernate将java类映射到数据库表中,从java数据类型中映射到sql数据类型中。
      Hibernate是传统java对象和数据库服务之间的桥梁,用来处理基于O/R映射机制和模式的那些对象。

Hibernate的优势:
    Hibernate 使用 XML 文件来处理映射 Java 类别到数据库表格中,并且不用编写任何代码。
    为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
    如果在数据库中或任何其它表格中出现变化,那么仅需要改变 XML 文件属性。
    抽象不熟悉的 SQL 类型,并为我们提供工作中所熟悉的 Java 对象。
    Hibernate 不需要应用程序服务器来操作。
    操控你数据库中对象复杂的关联。
    最小化与访问数据库的智能提取策略。
    提供简单的数据询问。
 **下面是一个详细的Hibernate应用程序体系结构视图以及一些重要的类 :**
    ![这里写图片描述](https://img-blog.csdn.net/20180112155044240?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvV0pIZWxsb1dvcmxk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

Hibernate使用不同的现存java api,比如JDBC,java事物api,以及java命名和目录界面。
Hibernate支持几乎所有带有JDBC驱动的数据库。JNDI和JTA允许Hibernate与J2EE应用服务器继承。

**配置对象:**
    这是一个在任何Hibernate应用程序中创造的第一个Hibernate对象,并且经常只有在应用程序初始化的时候创造。它代表Hibernate所需要的一个配置或者属性文件。
    配置对象提供了两种基础组建:
        数据库连接:由Hibernate支持的一个或多个配置文件处理,这些文件是Hibernate.peoperties和Hibernate.cfg.xml.
        类映射设置:这个组建创造了java类和数据库表格之间的联系。
**SessionFactory对象:**
    配置对象被用于创造一个SessionFactory对象,使用提供的配置文件为应用程序依次配置Hibernate,并允许实例化一个会话对象。SessionFactory是一个线程安全对象并由应用程序所有的线程所使用。
    SessionFactory是一个重量级对象,所以通常他都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个SessionFactory对象使用一个单独的配置文件,所以如果你使用多种数据库那么你就需要创建多种SessionFactory对象。
**Session对象:**
    一个会话被用于与数据库的物理连接。session对象时轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过session对象保存和索引。
    session对象不应该长时间保持开启状态因为他们通常情况下并非是线程安全的,并且他们应该按照所需创造和销毁。
**Transaction对象:**
    一个事务代表了与数据库工作的一个单元并且大部分RDBMS支持事务功能。在Hibernate中事务由底层事务管理器和事物处理。
    这是一个选择性对象,Hibernate应用程序可能不选择这个接口,二是在自己应用程序代码中管理事务。
**Query对象:**
    Query对象使用SQL或者Hibernate查询语言HQL字符串在数据库中来检索数据并创造对象。一个查询的示例被用于连接查询参数,限制由查询返回的结果数量,并最终执行查询。
**Criteria对象:**
Critical对象被用于创造和执行面向规则查询的对象来检索对象。

猜你喜欢

转载自blog.csdn.net/WJHelloWorld/article/details/79045014