Hibernate之核心文件

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

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

  

 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0 //EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置数据库JDBC驱动 -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 配置数据库连接URL -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/mysqldb
</property>
<!-- 配置数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 配置数据库密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 输出运行时生成的SQL语句 -->
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<!-- 配置数据库方言 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 列出所有的映射文件 -->
<mapping resource="org/hibernate/entity/User.hbm.xml" />
</session-factory>
</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集合属性。要实现双向多对多关联,必须在使用中间表来实现两个实体间的关联关系。

上一篇:循环中的自变量-break和continue


下一篇:解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE