Hibernate技术

简介:
基础知识
    持久层是 MODEL 层的主要组成部分。是在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域。代表着某个系统中的一个逻辑层次,这个层次将数据使用者与数据实体相关联。
Hibernate 是一种“对象 关系型数据映射组件”,根据 Object 和数据库存定义,就要以通过映射文件建立两者之间的关联(映射)关系,这也就是所谓的 Mapping 。映射文件通常以“ .hbm.xml ”作为后缀名
    一个 Hibernate 应用的创建步骤:
1.  创建数据库。
2.  构建 Hibernate 基础代码,定义关系型数据表与实体类之间的映射关系。
1)       Hibernate 基础代码包括 POJO 类和 Hibernate 映射文件。
2)       POJO Hibernate 语义中理解为数据库表所对应的 Domain Object ,是一个不包含逻辑代码的值对象( VO ),从数据层面上来看, POJO 作为数据实体的对象化表现形式,也称为实体类。
3)       构建 Hibernate 基础代码有以下途径:
l          手工编写。根据实体类及表结构的对应关系,按照 Hibernate 映射规范人工编写。
l          根据数据库定义导出表结构,并生成映射文件和 JAVA 代码(推荐)。
l          根据现有的 JAVA 代码生成对应的映射文件,从而将 JAVA 代码与数据库表相绑定。
4 )通过 Hibernate 官方提供的 MiddleGen fo Hibernate Hibernate_Extension 工具包,可以从现有数据库导出表结构,并生成对应的映射文件和 POJO 代码。
3.  完成 Hibernate 基础配置。
l          Hibernate 配置文件主要用于配置数据库连接和 Hibernate 运行时所需用的各种属性。
l          配置文件名默认为“ Hibernate.cfg.xml ”, Hibernate 初始化期间会自动在 CLASSPATH 中寻找这个文件,并读取其中的配置信息,为后期数据库操作做好准备。
1 Configuration 类:负责管理 Hibernate 的配置信息。 Hibernate 运行时需要获取一些义愤实现的基本信息,其中几个关键属性包括:
数据库 URL ;数据库用户;数据库用户密码;数据库 JDBC 驱动类;数据库适配器( dialect, 用于对特定数据库提供支持)
l          当调用: Configuration config=new Configuration().configure(); 时, Hibernate 会自动在当前的 CLASSPATH 中搜寻 Hibernate.cfg.xml 文件并将其加载至内存中,作为后继操作的基础配置。
l          Configuration 类一般只有在获取 SessionFactory 时需要涉及,当 SessionFactory 实例创建之后,由于配置信息已经由 Hibernate 绑定在返回的 SessionFactory 之中,因此一般情况下无需再对其操作。
2 SessionFactory 负责创建 Session 实例。可以通过 Configuration 实例构建 SessionFactory:
Configuration config=new Configuration().configure();
SessionFactory sessionFactory=config.buildSessionFactory();
Configuration 实例 config 会根据当前的数据库配置信息,构造 SessionFactory 实例并返回。 SessionFactory 一旦构造完毕,即被赋予特定的配置信息。
l          SessionFactory 构造完毕后,将不再受 config 的影响。
l          如果应用中访问多个数据库,则针对每个数据库应分别为其创建对应的 SessionFactory 实例。
l          SessionFactory 中保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和 statement pool
1.  Session :是 Hibernate 持久化操作的基础。与传统意义上的 Web 层的 HttpSession 没有关系。 Hibernate Session 之与 Hibernate, 相当于 JDBC Connection 之与 JDBC.
l          Session 作为贯穿 Hibernate 的持久化管理器核心,提供了众多持久方法如 save,update,delete,find 等。通过这些方法,可以透明地完成对象的增删改查。非线程安全。
l          Session 实例由 SessionFactory 构建:
Configuration config=new Configuration().configure();
SessionFactory sessionFactory=config.buildSessionFactory();
Session session=sessionFactory.openSession();
之后就可以调用 Session 所提供的 save,get,delete,find 等方法完成持久层操作。
l          Hibernate 3 中的 Session 接口取消了 find 方法,必须通过 Query Criteria 接口进行数据查询 , 这两个查询接口,提供了对查询条件的封装机制。
两者的不同在于, Query 面向 HQL Native SQL ,而 Criteria 提供了面向对象的查询模式。
String hql=”from TUser user wher user.name like ?”;
Query query=session.creatQuery(hql);
三     基础配置:
四    ORMapping:对象关系映射
通过一个类的操作来代表数据库中的操作
类中的方法对应SQL语句
Hibernate是一个ORMapping的实现,主要的功能就是以对象的形式操作数据库.它提供了强大的对象和关系数据库映射以及查询功能.使用Hibernate操作数据库的代码量很少,用户像使用对象一样使用数据库,所有的操作过程都是通过POJO类完成。
Hibernate开发步骤:
1、持久化类的设计(POJO类,只包含setter和getter方法的类)
2、持久化类和关系数据库的映射(HBM映射,描述类和表之间的关系)
3、应用的开发
Hibernate最好的使用方法是使用普通的JAVA对象(POJO)这种编程模型来进行持久化。
一个基本的映射文件形式:
<hibernate-mapping package="POJO类所在的包">
<class name="类的完整路径" table="数据库表名">
<id name="id" type="主键的类型" column="对应表中的列名">
<generator clsaa="指定主键的生成方式">
</id>
<property name="POJO中的属性名" type="类型" column="对应数据库表中的列名">
......
</class>
</hibernate-mapping>
hibernate.cfg.xml:对Hibernate环境进行配置,包括使用的数据库或数据通信源方言(所要使用的数据库类型)。
POJO类的名称最好与表名称一致,只是首字母大写。
在Hibernate中操作数据库使用Session,可以通过SessionFactory实例化。
主键生成方式:
assigned:指派
Sequence:自动增长的数据段
uuid.hex:生成一个32位不会重复的主键
SessionFactory可以生成Session实例,可在多个应用线程中共享,一般情况下,一个应用只有一个SessionFactory,其中缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。
session不是线程安全的,它代表与数据库之间的一次操作,它的概念介于Connection和 Transaction(事务)之间。也称为持久化管理器,与持久化操作有关的一个接口。所有的工作完成后,需要关闭。操作中所使用的Query对 象,Transaction对象都是通过Session取得的
Transaction将应用代码从底层的事务实现中抽象出,可能是一个JDBC事务,也可能是一个JTA事务,使用Hibernate进行操作(增\删\改)时必须显示地调用Transaction(默认:autoCommit=false)
五    细粒度模型
细粒度模型就是将原本业务模型中的对象加以细分,得到更多的对象.
对于Hibernate,所谓细粒度模型,主要是针对实体类设计的对象细分。主要有两个目的:
面向设计的粒度细分:实现更加清晰的系统逻辑
面向性能的性能细分:提高系统的能耗比
对象的细分更多地体现在实体的关联,对于细分后的类,数据库中都会有与之对应的表。通过表之间的逻辑组合成为最终的实体对象。
在Hibernate中可以通过Component节点来完成对表的对象的细分。在Hibernate中将某个实例的对象中的一个逻辑组成称为component.它与实体对象的根本区别就在于它没有标识(ID),它作为一个逻辑组成,完成从属于实体对象。
对于表的对象细分,在Hibernate中可以借助Component节点的定义完成。
在Hibernate中将某个实例对象中的一个逻辑组成称为一个Component。它与实体对象的根本差别在于它没有标识,它作为一个逻辑组成,完全从属于实体对象。
基本格式<component name="POJO类名" class="类的完整路径">
        <property name="属性名" type="类型" column="对应数据库表中的列" length="长
         ..........
        </component>
六   Hibernate支持三种类型的继承形式
Hibernate支持三种类型的继承形式:
1、表与子类之间的独立一对一关系。
2、每个子类对应一张子表,并与主类共享主表。
3、表与类的一对多关系。
对于第一种情况:每个子类需要一个映射文件
对于第二种情况:虽然每个子类各对应一个表,但只有一个映射文件,子表与主表的映射关系通过joined-subclass来进行设置。
<joined-subclass name="子类的完整路径" table=“子类对应的表的名称”>
</joined-subclass>
对于第三种情况,只用一张表来完成信息存储,通过在数据库层次上增加一个用以区别不同子类的字段,并在映射文件中使用discriminator和subclass进行设置即可。
<discriminator column="用以区别不同子类的字段名" type="类型"></discriminator>
<subclass name="子类完整路径" discriminator-value="对应该子类的字段值">
由于业务的需求,有时会使用多个字段作为复合主键
为实现复合组键,在POJO类中必须实现Serializable接口,且必须覆写equals()和hasCode()方法,对于这两个方法的覆写,可以使用第三方工具commons-lang-1.0.1.jar
在映射文件中进行如下配置:
<composite-id>
<key-property name="属性名1" type="类型1" column="对应数据库表中的列1" length="长度1">
<key-property name="属性名2" type="类型2" column="对应数据库表中的列2" length="长度2">
...........
</composite-id>
Hibernate 的基础配置主要围绕 SessionFactory 展开。
1 .配置 SessionFactory :完成配置文件和映射文件加载之后,就得到了一个包含了所有 Hibernate 运行期参数的 Configuration 实例,通过这个实现,可以构建一个唯一的 SessionFactory
l          数据库连接配置:在 Hibernate 中,可以设置两种数据库访问策略:一种是根据指定的 JDBC 参数进行数据库连接,由 Hibernate 来完成连接管理过程。另外一种是通过 JNDI 完成数据库连接获取。只可选其一。
l          数据库连接池配置:如果使用 JDBC 方式访问数据库,可以为其指定数据库连接池实现, Hibernate 支持四种连接池组件:默认数据库连接池, C3P0 dbcp Proxool
2 .事务管理:为了使用 Hibernate Transaction API, 必须通过 Hibernate.transaction.factory_class 属性指定一个 Transaction 实例工厂类。 Transaction API 隐藏了义愤的事务机制,允许 Transaction API 代码在受管制和非受管制的环境下都可以运行。
l          使用 JDBC 的事务处理机制。
l          使用 JTA












本文转自yunlielai51CTO博客,原文链接:http://blog.51cto.com/4925054/1117725,如需转载请自行联系原作者

相关文章
|
5月前
|
SQL Java 关系型数据库
Hibernate的使用总结
Hibernate的使用总结
38 0
|
10月前
|
SQL 存储 Java
Hibernate
Hibernate
48 0
|
Java 数据库连接 程序员
ORM框架Hibernate全面解读
Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。
309 0
|
前端开发 Java 数据库连接
连Hibernate技术都不清楚,你敢说你自己会ORM框架?
ORM框架不是一个新话题,它已经伴随我们很多年了。它提供了概念性的、易于理解的数据模型,将数据库中的表和内存中的对象建立了很好的映射关系。在Java中常用的ORM框架主要有两个:Hi...
131 0
|
Java 关系型数据库 数据库连接
|
Java 数据库连接 数据库
|
关系型数据库 Java 数据库连接
|
SQL Java 数据库连接
Hibernate初识
简介 相信学过SSH2框架的同学们对Hiberate一点也不陌生。Hibernate是Gavin King于2001年开始,作为EJB2风格实体bean的替代品开发的对象关系映射工具。
1164 0
|
Java 数据库连接
学习hibernate,这个系列很不错
从这里入,感谢作者啊。 看了很多资料,这个是最能让我入门的。感觉。 http://blog.csdn.net/yerenyuan_pku/article/details/52745486
718 0