• Hibernate之核心文件


    一个Hibernate项目核心配置文件主要分为以下三个方面:1、配置文件hibernate.cfg.xml;2、配置文件*.hbm.xml,此文件一般包括映射文件的结构以及各种属性的映射方式;3、Hibernate关联关系映射。

    1、配置文件hibernate.cfg.xml文件

      

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE hibernate-configuration
     3     PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0 //EN"
     4     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     5 <hibernate-configuration>
     6     <session-factory>
     7         <!-- 配置数据库JDBC驱动 -->
     8         <property name="hibernate.connection.driver_class">
     9             com.mysql.jdbc.Driver
    10         </property>
    11         <!-- 配置数据库连接URL -->
    12         <property name="hibernate.connection.url">
    13             jdbc:mysql://localhost:3306/mysqldb
    14         </property>
    15         <!-- 配置数据库用户名 -->
    16         <property name="hibernate.connection.username">root</property>
    17         <!-- 配置数据库密码 -->
    18         <property name="hibernate.connection.password">root</property>
    19         <!-- 输出运行时生成的SQL语句 -->
    20         <property name="show_sql">true</property>
    21         <property name="hibernate.hbm2ddl.auto">update</property>
    22         <property name="hibernate.cache.use_second_level_cache">
    23             true
    24         </property>
    25         <property name="hibernate.cache.provider_class">
    26             org.hibernate.cache.EhCacheProvider
    27         </property>
    28         <!-- 配置数据库方言 -->
    29         <property name="hibernate.dialect">
    30             org.hibernate.dialect.MySQLDialect
    31         </property>
    32         <!-- 列出所有的映射文件 -->
    33         <mapping resource="org/hibernate/entity/User.hbm.xml" />
    34     </session-factory>
    35 </hibernate-configuration>

    hibernate.cache.use_second_level_cache 是hibernate的二级缓存属性。Hibernate共有两级缓存,第一级缓存是Session级的缓存,它是事务范围的缓存,可以由Hibernate自动管理。第二级缓存是由SessionFactory管理的进程级缓存,可以在配置文件中进行配置和更改,而且可以动态加载和卸载。其他相关属性,需要查找相关资料,这里不一一列举。

    2、映射文件*.hbm.xml

      映射文件用于向Hibernate提供将对象持久化到关系数据库中的相关信息,每个Hibernate映射文件结构基本相同,根元素都为hibernate-mapping元素,Hibernate-mapping元素下面又可以包含多个class子元素,每个子元素都对应着一个持久化的映射。

    hibernate映射文件里有很多元素,元素里又包含不同的属性,这里只列举一部分:

    (1)Hibernate-mapping元素。该元素定义了XML配置文件的基本属性。

      I、default-access = "field | property |ClassName " :指定Hibernate用来访问属性时所使用的策略,可以通过实现PropertyAccessor接口来自定义属性访问策略。该属性可选,默认值为Property。当为property时,使用getter和setter方法访问成员变量,当值为"field"时,使用反射访问成员变量。

      II、default-lazy: 指定是否采用延迟加载策略,改属性默认值为true,即采用延迟加载策略。

    (2)class元素。用来声明一个持久化类,通过它可以定义Java持久化类与数据表之间的映射关系。<class>元素中包含的主要属性有:

      I、name属性:持久化类或者接口的全限定名。

      II、table属性:持久化类对应的数据库表名。

    (3)Id元素。此标识属性映射到持久化对应的数据库表中的主键列。

       此元素里最重要的一个是它包含了一个可选的<generator>子元素。generator元素指定了主键的生成方式。对于不同的数据库和业务,其主键生成策略往往不同,Hibernate提供了几个内置的主键生成器策略:

        increment: 用于long、short或int类型主键生成唯一的标识。只有当没有其他进程想同一张表中插入数据是才可用,不能再集群环境下使用

        identity   : 采用底层数据库本身提供的主键生成机制,改生成器要求在数据库中把主键定义为自增长(identity)类型,返回的标识符类型为long、int或short。

        sequence: 在支持序列(sequence)的数据库中可以使用该生成策略创建唯一标识。返回的标识符类型为long、short或int

        hilo     :   使用一个高/低位算法高效地生成long、short和int类型的标识符。

        native     :  依据底层数据库的能力在identity、sequence、hilo3种生成器中选择一种。

        assigned :  让应用程序在save()方法调用前为对象分配一个标识符。如果不指定id 元素的generator属性,则默认使用该主键生成器策略。

        foreign    :   使用另一个关联对象的标识属性。常用在1-1主键关联映射中。

    (4)property元素映射普通属性

      <property name="username" column = "NAME" type="java.lang.String" />

    (5)映射集合属性

      根据java集合的特点,Hibernate中可以分为如下几种集合类映射:

       <set>    :  无序,通常用于一对多或者多对多关联关系映射。

       <list>    :  有序,必须要有一个索引字段。

       <map>  :  无序,必须要有一个映射关键字字段

       <bag>   :  有序,必须要有一个索引字段

         <array> :  有序,必须要有一个索引字段

    3、Hibernate关联关系映射

      Hibernate关联关系可以分为单向关联和双向关联两大类。单向关联可以分为一对一、一对多、多对一和多对多四种关联方式。多向关联可以分为一对一、一对多、多对多3种关联方式。

    (1)单向的一对一关联。其又可以分为两类,分别是通过主键关联和通过外键关联。

      I、通过主键关联。一对一的关联可以通过主键关联,但基于主键关联的持久化类(其对应的数据表称为从表)却不能拥有自己的主键生成策略,这是因为从表的主键必须由关联类(其对应的数据表称为主表)来生成。此外,要在被关联的持久化类的映射文件中添加one-to-one元素来指定关联属性,并为one-to-one元素指定constrained属性值为true,此表表明从表的主键由关联类生成。

      II、通过外键关联。通过外键关联时两张数据表的主键是不同的,通过在一张表中添加外键列来保持一对一的关系,配置外键关联关系时需要使用many-to-one元素,因为通过外键关联的一对一关系,本质上时一对多关系的特例,因此,只需在many-to-one元素中增加unique=”true"属性即可,这相当于在多的一端增加了唯一性的约束

    (2)单向的一对多关联。单向的一对多关联映射关系主要是通过外键来关联的,一对多的关联映射是在表示“多”的一方的数据表中增加一个外键,并由“一”的一方指向“多”的一方。单向一对多关联的持久化类里需要包含一个集合属性,在“一”的一方访问“多”的一方时,“多”的一方将以集合的形式体现。

    (3)单向的多对一关联。单向的多对一关联映射也是通过外键来关联的。多对一的映射方式类似一对多的映射方式,不过它的映射关系是由“多”的一方指向“一”的一方。在表示“多”的一方的数据表中增加一个外键来指向表示“一”的一方数据表,“一”的一方作为主表,“多”的一方作为从表。

    (4)单向的多对多关联。多对多关系在数据库中是比较常见的,它利用中间表将两个主表关联起来,中间表的作用是将两张表的主键作为其外键,通过外键建立者两张表之间的映射关系。

    (5)双向的一对一关联

      I、通过主键关联。通过主键关联的双向一对一映射,在需要一方的配置文件中将主键生成策略配置成foreign,即表示需要根据另一方的主键来生成自己的主键,而该实体本身不具有自己的主键生成策略。一对一主键映射在双向的一对一映射中应用比较多。

      II、通过外键关联的双向一对一映射,外键可以放在任意一方。在存放外键一方的映射文件中,需要添加many-to-one元素,并为该元素添加unique=“true”属性,而另外一方的配置文件中需要添加one-to-one元素,并使用其name属性来指定关联属性名。此时,存放外键的一方对应的数据表为从表,而另一方对应的数据表变为主表。

    (6)双向的一对多关联。双向的一对多关联在“多”的一方要增加新属性以引用关联实体,在“一”的一方则增加集合属性,该集合中包含“多”一方的关联实体。双向的一对多关联和双向的多对一关联实际上是完全相同的。

    (7)双向的多对多关联。双向的多对多关联,两端都要添加Set集合属性。要实现双向多对多关联,必须在使用中间表来实现两个实体间的关联关系。

  • 相关阅读:
    mongodb浅析
    java8学习的一点总结
    mysql 存储引擎对索引的支持
    Ubuntu16.04下安装OpenCV2.4.13
    windows配置远程桌面连接到ubuntu
    Ubuntu16.04调整屏幕分辨率至1920*1080
    Ubuntu 16.04 安装NodeJs
    Ubuntu安装SSH服务
    基于MNIST数据集使用TensorFlow训练一个包含一个隐含层的全连接神经网络
    基于MNIST数据集使用TensorFlow训练一个没有隐含层的浅层神经网络
  • 原文地址:https://www.cnblogs.com/hoojjack/p/4746433.html
Copyright © 2020-2023  润新知