Hibernate之初见(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SweetyoYY/article/details/79173558

* ORM

*1.1 JDBC

       JDBC代表Java Database Connectivity,它提供了一组java api 用来访问关系数据库的的java程序。这些java api 能够使Java程序执行sql语句,并与任何符合SQL规范的数据库进行交互。
    之后我也查询了一些jdbc的优缺点,可以更近一步的了解一下:

JDBC优点 JDBC缺点
干净整洁的 SQL 处理 大项目中使用很复杂
大数据下有良好的性能 很大的编程成本
对于小应用非常好 没有封装
易学的简易语法 难以实现 MVC 的概念
查询需要指定 DBMS

*1.2 why ORM?

       ORM(ojbect-relational-mapping)对象关系映射,为了解决面向对象与关系数据库不匹配的问题。RDBMS以表格的形式存储数据,然后像Java或者C#这样的面向对象的语言表示一个对象关联图。ORM通过使用描述对象和数据库之间映射的元数据,将实体对象自动持久化到关系数据库中。
    我们依然通过优缺点,来多方位的认识一下他:

ORM优点 ORM缺点
使用业务代码访问对象而不是数据库中的表 降低程序的执行效率
从面向对象逻辑中隐藏 SQL 查询的细节 思维固定化
基于 JDBC 的 ‘under the hood’
没有必要去处理数据库实现
实体是基于业务的概念而不是数据库的结构
事务管理和键的自动生成
应用程序的快速开发

*1.3 Java ORM 框架

       之前我们用到的ORM框架是mvc,和如今的hibernate,我们不要忘记哦,hibernate本身也是一个框架~

  • Enterprise JavaBeans Entity Beans
  • Java Data Objects
  • Castor
  • TopLink
  • Spring DAO
  • Hibernate
  • And many more

* Hibernate

*2.1 简介

       Hibernate 是由 Gavin King 于 2001 年创建的开放源代码的对象关系框架。他构建了具有关系对象持久性和查询服务的java应用程序。hibernate将实体类映射到数据库的表中,hibernate是传统的java对象和数据库服务器之间的桥梁,用来处理基于O/R映射机制和模式的对象。

这里写图片描述

*2.2 优势

  • Hibernate 使用 XML 文件来处理映射 Java 类。
  • 别到数据库表格中,并且不用编写任何代码。
  • 为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
  • 如果在数据库中或任何其它表格中出现变化,那么仅需要改变 XML 文件属性。
  • 抽象不熟悉的 SQL 类型,并为我们提供工作中所熟悉的 Java 对象。
  • Hibernate 不需要应用程序服务器来操作。
  • 操控你数据库中对象复杂的关联。
  • 最小化与访问数据库的智能提取策略。
  • 提供简单的数据询问。

*2.3 hibernate支持的数据库

       hibernate几乎支持所有主要的RDBM。以下是hibernate所支持的数据库引擎:

  • HSQL Database Engine
  • DB2/NT
  • MySQL
  • PostgreSQL
  • FrontBase
  • Oracle
  • Microsoft SQL Server Database
  • Sybase SQL Server
  • Informix Dynamic Server

*2.4 hibernate架构

       Hibernate 架构是分层的,作为数据访问层,你不必知道底层 API 。Hibernate 利用数据库以及配置数据来为应用程序提供持续性服务(以及持续性对象)。我们先来看一下整体的架构图:

这里写图片描述

    我们再来一下详细的看看hibernate应用程序体系结构视图以及一些重要的类。

这里写图片描述

    hibernate使用了不同现存的Java API ,比如JDBC,java事务API(JTA),以及Java命名和目录界面(JNDI)。JDBC提供了一个基本的抽象级别的通用关系数据库的功能,Hibernate支持几乎所有带有JDBC驱动的数据库。JNDI和JTA允许Hibernate与J2EE应用程序服务器相集成。

*2.5 hibernate对象

    下面简要了结束了Hibernate应用程序架构所涉及的每一个类对象。

*2.5.1 配置对象

    配置对象是你在任何Hibernate应用程序中创造的第一个hibernate对象,并且经常只在应用程序初始化期间创造。它代表了Hibernate所需一个配置或属性文件。配置对象提供了两种基础组件。

  • 数据库连接:由 Hibernate 支持的一个或多个配置文件处理。这些文件是 hibernate.properties 和 hibernate.cfg.xml。
  • 类映射设置:这个组件创造了java类和数据库表格之间的联系。

*2.5.2 SessionFactory对象

    配置对象被用于创造一个SessionFactory对象,使用提供的配置文件为程序配置hibernate,SessionFactory接口负责初始化Hibernate。并且允许实例化一个session对象。SessionFactory是一个线程安全对象并由应用程序所有的线程使用。SessionFactory 是一个重量级对象所以通常它都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个 SessionFactory 对象使用一个单独的配置文件。所以如果你使用多种数据库那么你要创造多种 SessionFactory 对象。

*2.5.3 Session对象

    一个会话被用于与数据库的物理连接。Session 对象是轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过 Session 对象保存和检索。Session 对象不应该长时间保持开启状态因为它们通常情况下并非线程安全,并且它们应该按照所需创造和销毁。

*2.5.4 Transaction 对象

    一个事务代表了与数据库工作的一个单元并且大部分 RDBMS 支持事务功能。在 Hibernate 中事务由底层事务管理器和事务(来自 JDBC 或者 JTA)处理。这是一个选择性对象,Hibernate 应用程序可能不选择使用这个接口,而是在自己应用程序代码中管理事务。

*2.5.5 Query 对象

    Query 对象使用 SQL 或者 Hibernate 查询语言(HQL)字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数,限制由查询返回的结果数量,并最终执行查询。

*2.5.5 Criteria 对象

    Criteria 对象被用于创造和执行面向规则查询的对象来检索对象。

*2.6 映射文件

    我们先通过项目中的一个映射文件来入手~

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="cn.itcast.shop.user.vo.User" table="user">
        <id name="uid">
            <generator class="native"/>
        </id>
        <property name="username"/>
        <property name="password"/>
        <property name="name"/>
        <property name="email"/>
        <property name="phone"/>
        <property name="addr"/>
        <property name="state"/>
        <property name="code"/>
    </class>
</hibernate-mapping>

    你需要以格式 .hbm.xml保存映射文件。我们保存映射文件在 Employee.hbm.xml 中。让我们来详细地看一下在映射文件中使用的一些标签:

  • 映射文件是一个以 <hibernate-mapping> 为根元素的 XML 文件,里面包含所有标签。
  • <class> 标签是用来定义从一个 Java 类到数据库表的特定映射。Java 的类名使用 name 属性来表示,数据库表明用 table 属性来表示。
  • <meta> 标签是一个可选元素,可以被用来修饰类。
  • <id> 标签将类中独一无二的 ID 属性与数据库表中的主键关联起来。id 元素中的 name 属性引用类的性质,column 属性引用数据库表的列。type 属性保存 Hibernate 映射的类型,这个类型会将从 Java 转换成 SQL 数据类型。
  • 在 id 元素中的 标签用来自动生成主键值。设置 generator 标签中的 class 属性可以设置 native 使 Hibernate 可以使用 identity, sequence 或 hilo 算法根据底层数据库的情况来创建主键。
  • <property> 标签用来将 Java 类的属性与数据库表的列匹配。标签中 name 属性引用的是类的性质,column 属性引用的是数据库表的列。type 属性保存 Hibernate 映射的类型,这个类型会将从 Java 转换成 SQL 数据类型。

* 未完待续

       接下来,会给大家继续分享hibernate的其他知识点,由于篇幅的缘故,我们下篇再见~感谢您的阅读,希望大家能够拍砖斧正~

猜你喜欢

转载自blog.csdn.net/SweetyoYY/article/details/79173558