zoukankan      html  css  js  c++  java
  • Hibernate学习0.Hibernate入门

    Hibernate是什么

    面向java环境的对象/关系数据库映射工具。

    1.开源的持久层框架.

    2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射.

    3.连接java应用和数据库的中间件.

    4.对JDBC进行封装,负责java对象的持久化.

    5.在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑

    Hibernate作用

    Hibernate是Java应用和关系数据库之间的桥梁,它负责Java对象和关系数据之间的映射。
    Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。

    ORM简介

    对象-关系映射(ORM,即Object-Relation Mapping).

    指单个组件中负责所有实体域对象的持久化,封装数据访问细节。

    对象-关系映射的概念

    面向对象概念

    面向关系概念

    对象

    表的行(记录)

    属性

    表的列(字段)

    ORM中间件的使用方法

       采用元数据来描述对象-关系映射细节,元数据通常采用xml格式,并存放在专门的对象-关系映射文件中。只要配置了持久化类与表的映射关系,orm中间件在运行时就能够参照映射文件的信息,把域对象持久化到数据库中。

    public void deleteCustomer(Customer c){
          Session session = getSession();
          session.delete(c);
    }

    执行步骤如下:

    1.运用反射机制,获得Customer对象的Customer.class类。

    2.参照映射文件得到Customer类对应的表的信息,以及和Customer类关联的类以及相应的表信息。

    3.根据以上信息生成SQL语句。

    4.调用JDBC  API,执行该语句。

    Hibernate软件包

    要使用Hibernate,需要得到Hibernate的jar包和相应的一些第三方包。在使用Hibernate时,需要用到的是Hibernate.jar和lib目录下的一些第三方jar包。
    • hibernate3.jar: 包含Hibernate3的基础框架和核心API类库,是必须使用的jar包。
    • cglib-2.1.2.jar: CGLIB库,Hibernate用它来实现PO字节码的动态生成,它是非常核心的库,是必须使用的jar包。
    • dom4j-1.6.1.jar: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件。
    • commons-collections.jar: Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。
    • commons-logging.jar: Apache Commons包中的一个,包含了日至功能,必须使用的jar包。
    • ant-1.6.5.jar: Ant编译工具的jar包,用来编译Hibernate源代码的。它是可选包。
    • c3po-0.9.0.jar: C3PO是一个数据库连接池,Hibernate可以配置为使用C3PO的连接池,如果准备用这个连接池,就需要这个jar包。
    • connector.jar: JCA(Java Cryptography Architecture,Java加密架构,java平台中用于访问和开发加密功能的框架)规范,如果在App Server上把Hibernate配置为Connector,就需要这个jar。一般App Server都会带上这个包。
    • jaas.jar: JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以它的实际上是多余的包。
    • jdbc2_0-stdext.jar: JDBC2.0的扩展包,一般来说数据库连接池会用上它,不过App Server都会带上它,所以也是多余的。
    • jta.jar: JTA(java事务处理的机制)规范,当Hibernate使用JTA的时候需要,不过App Server都会带上它,所以也是多余的。
    • junit-3.8.1.jar: Junit包,当运行Hibernate自带的测试代码的时候需要,否则就不用。
    • xerces-2.6.2.jar和xml-apis.jar:Xerces是XML解析器,xml-apis实际上是JAXP。也是多余的包。

    Hibernate API简介

    1.提供访问数据库操作(session,transaction,query)

    2.配置hibernate接口(configuratioin)

    3.回调接口(Interceptor,Lifecycle,Validatable)

    4.用于扩展的功能接口(UserType,CompositeUserType, IdentifierGenerator)

    Hibernate对JDBC做了轻量级的封装。所谓轻量级是指Hibernate并没有完全封装JDBC,java应用既可以通过HibernateAPI来访问数据库,还可直接通过JDBC API访问数据库。

    Hibernate核心接口

    1.Configuration

    配置hibernate,根启动hibernate,创建sessionFactory对象。

    2 .sessionFactory

    负责创建Session对象,可以通过Configuration对象创建SessionFactory对象。

    SessionFactory 对象中保存了当前的数据库配置信息和所有映射关 系以及       预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存。    

    SessionFactory对象的创建会有较大的开销,而且SessionFactory对象采取了线程安全的设计方式,因此在实际中SessionFactory对象可以尽量的共享,在大多数情况下,一个应用中针对一个数据库可以共享一个SessionFactory实例

    Configuration config = new Configuration().configure();

    SessionFactory factory = config.buildSessionFactory();

    3.Session

    使用最广泛,也被称为持久化管理器,它提供和持久化相关的操作。增、删、改、查等。不是线程安全的,因此,一个Session对象只可以由一个线程使用。避免多个线程共享。轻量级的,创建和销毁不需要消耗太多资源。Session中有一个缓存,称为一级缓存。存放当前工作单元加载的对象。

    Configuration config = new Configuration().configure();

    SessionFactory factory = config.buildSessionFactory();

    Session session = factory.openSession();

    4.Transaction hibernate数据库事务接口

    将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)——允许应用通过一组一致的API控制事务边界。

    使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)

    Transaction tx = session.beginTransaction();

    5.Query和Criteria接口

    都是查询接口,query实例包装了HQL查询语句,hql是面向对象的,他引用类名及类的属性名,而不是表名和字段名。Criteria接口完全封装了基于字符串形式的查询语句,比query接口更面向对象,他擅长执行动态查询。sessoin接口的find方法也具有数据查询功能,但他只是执行一些简单的hql查询语句的快捷方式,远没有query接口功能强大。

    回调接口

    1.Lifecycle和Validatable接口:lifecycle接口能使持久化类响应被加载、保存和删除事件。Validatable接口使持久化类的接口被保存之前进行数据验证。这种方式强迫持久化类实现特定接口,使hibernate API渗透到持久化类中,会影响可移植性,不值得推荐。

    2.Interceptor:不必由持久化类来实现。可定义专门实现该接口的类,负责响应持久化类的实例被加载、保存、更新或删除的事件。

    Hibernate映射类型接口

    1.PrivateType类:映射java基本数据类型,包括ByteType、ShortType、IntegerType、LongType、FloatType、DoubleType、CharactorType、BooleanType。

    2.DateType:映射java日期类型。

    3.BinaryType:映射Byte[]类型。

    Query.setParameter(“name”,”name”,Hibernate.STRING)

    可供扩展的接口

    hibernate提供的多数功能是可配置的,允许用户选择适当的内置策略。如可配置如下数据库方言:

    hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect

    hibernate.dialect=net.sf.hibernate.dialect.OracleDialect

    hibernate.dialect=net.sf.hibernate.dialect.SybaseDialect

    如果hibernate内置的策略不能满足需求时,允许用户自定义实现接口或扩展特定的类。Hibernate的扩展点包括:

    主键生成策略:IdentifierGenerator 

    sql方言:Dialect抽象类

    缓存机制:cache和cacheprovider接口

    jdbc连接管理器:connectionprovider等

    Hibernate运行过程

    Hibernate的运行过程如下:

    1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,

    2、并用这些信息生成一个SessionFactory对象,

    3、然后从SessionFactory对象生成一个Session对象,

    4、并用Session对象生成Transaction对象;

        A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;

        B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。

    小结

  • 相关阅读:
    关于JSON可能出现的错误,待更/todo
    mongoose的安装与使用(书签记录) 2017
    HTTP的学习记录3--HTTPS和HTTP
    HTTP的学习记录(二)头部
    HTTP(一)概述
    LeetCode 455. Assign Cookies
    LeetCode 453. Minimum Moves to Equal Array Elements
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 447. Number of Boomerangs
    LeetCode 416. Partition Equal Subset Sum
  • 原文地址:https://www.cnblogs.com/wuyudong/p/hibernate-introduction.html
Copyright © 2011-2022 走看看