Hibernate简介

介绍

 Hibernate是轻量级JavaEE应用的持久层解决方案,是一个面向Java环境的对象/关系数据库映射的工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。Hibernate不仅管理Java类到数据库表的映射(包括java数据类型到sql数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度缩短使用JDBC处理数据持久化的时间。Hibernate完成对象模型和基于SQL的关系模型的映射关系。使得应用开发者可以完全采用面向对象的方式来开发应用程序。

ORM

 ORM的全程是Object/Relation Mapping,对象/关系数据库映射。ORM可以理解成一种规范,它概述了这类框架的基本特征:完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。因此,我们可把ORM框架当成应用程序和数据库的桥梁。   

Hibernate中的对象及操作

  • 操作步骤

    Hibernate并不推荐采用DriverManager来连接数据库,而是推荐使用数据源来管理数据库连接,这样能保证最好的性能。
    为了使用Hibernate进行持久化操作,通常有如下操作步骤:
    1、开发持久化类,由POJO加映射文件组成
    2、获取Configuration
    3、获取SessionFactory
    4、获取Session,打开事务
    5、关闭事务,关闭Session

    对POJO的操作必须在Session管理下才有是九华操作的能力才能同步到数据库。Session由SessionFactory工厂产生,SessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SessionFactory对象。SessionFactory对象由Configuration对象生成,Configuration对象负责加Hibernate配置文件。

  • Hibernate中的对象

    Configuration:

     org.hibernate.cfg.Configuration实例代表了应用程序到SQL数据库的映射配置,Configuration对象提供了一个buildSessionFactory方法,该方法可以产生一个不可变的SessionFactory对象。
      随着Hibernate所使用配置文件的不同,创建Configuration对象的方式也不相同。通常有如下几种配置Hibernate的方式:
      1、使用hibernate.properties文件作为配置文件
      2、使用hibernate.cfg.xml文件作为配置文件
      3、不使用任何配置文件,以编码方式创建Configuration对象。
      Configuration实例的唯一作用是创建SessionFactory实例,所以它被设计成启动期间对象,一旦SessionFactory创建完成,它就被丢弃了。
    

    SessionFactory:

      这是Hibernate的关键对象,它是单个数据库映射关系经过编译后的内存镜像,它是线程安全的。它是生成Session的工厂,本身需要依赖于ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。
    

    Session:

      它是应用程序与持久化储存层之间的交互操作的一个单线程对象。它也是Hibernate持久化操作的关键对象,所有的持久化对象必须在Session管理下才可以进行持久化操作。此对象生存期很短。它底层封装了JDBC连接,它也是Transaction的工厂。Session对象持有一个必选的一级缓存,显式执行flush之前,所有持久化操作的数据都在缓存中Session对象处。
    

    持久化对象:

      系统创建的POJO实例,一旦与特定的Session关联,并对应数据表的指定记录,该对象就处于持久化状态,这一系列对象都被称为持久化对象。在程序中对持久化对象执行的修改,都将自动被转换为持久层的修改。持久化对象完全可以是普通的JavaBeans/POJO,唯一特殊的是它们正与一个Session关联。
    

    瞬态对象和托管对象:

      系统通过new关键字创建的Java实例,没有与Session相关联,此时处于瞬态。瞬态实例可能是在被应用程序实例化后,尚未进行持久化的对象。如果一个曾经持久化过的实例,但因为Session的关闭则转化为托管状态。
    

    事务(Transaction):

     代表一次原子操作,它具有数据库事务的概念。Hibernate事务是对底层具体的JDBC、JTA以及CORBA事务的抽象。在某些情况下,一个Session之内可能包含多个Transaction对象。虽然事务操作是可选的,单所有持久化操作都应该在事务管理下进行,即使是只读操作。
    

    连接提供者(ConnectionProvider):

      它是生成JDBC连接的工厂,它通过抽象将应用程序与底层的DataSource或DriverManager隔离开。这个对象无需应用程序直接访问,仅在应用程序需要扩展时使用。
    

    事务工厂(TransactionFactory):

        它是生成Transaction对象实例的工厂。
    

Hibernate配置文件属性设置
每个Hibernate配置文件对应一个Configuration对象。在极端的情况下,不使用任何配置文件也可创建Configuration对象。

  • 数据源连接配置属性

    hibernate.show_sql:是否把所有的SQL语句都输出到控制台(true\false)
    hibernate.hbm2ddl.auto: 自动输出schema创建DDL语句 取值update\create\create-drop
    hibernate.dialect:设置连接数据库所使用的方言(不同数据库之间迁移时,底层数据库的访问细节会发生改变,只要设置了合适的数据库方言,Hibernate将可以自动应付底层数据库访问所存在的细节差异)
    hibernate.format_sql:是否将SQL语句转成格式良好的SQL。只接受true和false两个值。
    hibernate.jdbc.fetch_size:指定JDBC抓取数量的大小,它可接受一个整数值。
    hibernate.jdbc.batch_size:指定使用JDBC2的批量更新的大小,建议取5到30之间的值。
    hibernate.connection.autocommit:设置是否自动提交,通常不建议打开自动提交。
    hibernate.hbm2ddl.auto:设置当创建SessionFactory时,是否根据映射文件自动建立数据库表。如果使用create-drop值,显示关闭SessionFactory时,将Drop刚建的数据表。该属性可以为update、create和create-drop三个值。

  • 事务属性
    hibernate.transaction.factory_class:指定Hibernate所用的事务工厂的类型,该属性值必须是TransactionFactory的直接或间接子类。

  • 外连接属性
    hibernate.max_fetch_depth:设置外连接抓取树的最大深度
    取值. 建议设置为0到3之间 ,设为0强在全局范围内禁止外连接抓取,设为1或更高值能启用N-1或1-1的外连接抓取。

Annotation映射集合属性
inverse:指定该集合关联的实体在双向关联关系中不控制关联关系。
cascade:指定对持久化对象的持久化操作(如save、update、delete)是否会级联到它所关联的子实体。

Maven配置

        <!-- Hibernate4 -->
        <dependency>
            <groupId>com.googlecode.genericdao</groupId>
            <artifactId>dao-hibernate</artifactId>
            <version>4.3.6.Final</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.genericdao</groupId>
            <artifactId>search-jpa-hibernate</artifactId>
            <version>4.3.6.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.9.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.6.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.3.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>5.1.0.Final</version>
        </dependency>
         <!-- hibernate是否根据映射文件自动创建数据表 -->
        <dependency>
            <groupId>org.antlr</groupId>
            <artifactId>antlr-runtime</artifactId>
            <version>3.3</version>
        </dependency>
        <!-- log4j -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.7.7</version>
        </dependency>
        <!-- Mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.36</version>
        </dependency>

Spirng相关的JAR包我就不说明了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值