`

Hibernate基本配置文件

阅读更多

Hibernate基本配置文件学习笔记

Hibernate的基本配置文件有两种:hibernate.cfg.xml.hbm.xml文件。前者包含了Hibernate与数据库的基本连接信息,在Hibernate工作的初始阶段,这些信息被先后加载到ConfigurationSessionFactory实例;后者包含了Hibernate的基本映射信息,即系统中每一个类与其对应的数据库表之间的关联信息,在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xmlmapping节点被加载到ConfigurationSessionFactory实例。这两种文件信息包含了Hibernate的所有运行期参数。下面我们用详细的例子来说明这两种文件的基本结构和内容。
一、hibernate.cfg.xml文件:
<!--该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)-->
<?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节点就够了,除非我们中间使用了多个数据库-->
<session-factory>
<!--
用户名 -->
<property name="connection.username">root</property>
<!--url
信息 -->
<property name="connection.url">jdbc:mysql://localhost:3306/webases</property>
<!--
数据库方言信息-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--
密码 -->
<property name="connection.password">274507</property>
<!--
数据库驱动信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--
指定Hibernate映射文件路径 -->
<mapping resource="com/Hibernate/test_products.hbm.xml" />
</session-factory>
</hibernate-configuration>
二、.hbm.xml文件:
由于Hibernate的关联关系包含了一对一、一对多、多对一和多对多等四种类型,因此,也就有分别与之对应的四种.hbm.xml文件。下面我们就以比较常用的双向一对多型关联关系为例,介绍一下.hbm.xml文件的基本结构和内容。有关Hibernate更详细的内容,请参考相关文资料。
该例中有两张数据库表:一张为表,另一张为表,所用的数据库为MySQL。二者的建表语句如下:
CREATE TABLE IF NOT EXISTS Province
(
Guid INT NOT NULL AUTO_INCREMENT,
Provincename VARCHAR(16) NOT NULL,
PRIMARY KEY (Guid)
) TYPE=InnoDB;
CREATE TABLE IF NOT EXISTS City
(
Guid INT NOT NULL AUTO_INCREMENT,
Cityname VARCHAR(32) NOT NULL,
ProvinceID INTNOT NULL,
PRIMARY KEY (Guid)
) TYPE=InnoDB;
ALTER TABLE City ADD CONSTRAINT CityRFProvince FOREIGN KEY (ProvinceID)
REFERENCES Province (Guid) ON DELETE CASCADE ON UPDATE RESTRICT;
Province
表为主控方,City表为被控方,两者之间存在双向的一对多的关系。表City通过外键ProvinceID与表Province进行关联:当表Province中有记录被删除时,表City中相关记录亦被删除;当表Province中有记录被保存或者更新时,表City中相关记录无任何变化。
Hibernate自带工具Middlegen生成的Province.hbm.xml文件进行修改,内容如下:
<!--该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)-->
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>
<!--
映射文件开始 -->
<hibernate-mapping>
<!--
下面的class节点定义了Province类和对应数据库表之间的关联关系 -->
<class
name="com.xxx.hibernate.Province"
table="Province"
>
<!--
下面的两个节点定义了Province类中的属性和该类对应数据库表中的字段之间的关联关系,其中Guid为对应数据库表的主键 -->
<id
name="guid"
type="int"
column="Guid"
>
<generator class="native" />
</id>
<property
name="provincename"
type="java.lang.String"
column="Provincename"
not-null="true"
length="16"
>
</property>
<!--
下面的set节点定义了Province类和City类之间的一对多型关联关系 -->
<set
name="cities"<!--
集合属性的名称 -->
lazy="true"<!--
是否允许延迟加载 -->
inverse="true"<!--
定义这个集合是否为双向关联关系中的方向一端 -->
cascade="delete"<!--
定义有关操作是否关联到子实体(此处指City类对象) -->
>
<key>
<column name="ProvinceID" /><!--
定义集合所对应的数据库表的外键 -->
</key>
<one-to-many
class="com.xxx.hibernate.City"<!--
定义集合所属的类-->
/>
</set>
</class>
</hibernate-mapping>
Hibernate自带工具Middlegen生成的City.hbm.xml文件进行修改,内容如下:
<!--
该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)-->
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>
<!--
映射文件开始 -->
<hibernate-mapping>
<!--
下面的class节点定义了City类和对应数据库表之间的关联关系 -->
<class
name="com.xxx.hibernate.City"
table="City"
>
<!--
下面的两个节点定义了City类中的属性和该类对应数据库表中的字段之间的关联关系,其中Guid为对应数据库表的主键-->
<id
name="guid"
type="int"
column="Guid"
>
<generator class="native" />
</id>
<property
name="cityname"
type="java.lang.String"
column="Cityname"
not-null="true"
length="32"
>
</property>
<!--
下面的many-to-one节点定义了Province类和City类之间的一对多型关联关系 -->
<many-to-one
name="province"<!--
属性名称 -->
class="com.xxx.hibernate.Province"<!--
属性所属的类 -->
cascade="none"<!-- 指定哪些操作会从父对象(此处指City类对象)级联到子对象(此处指Province类对象) -->
outer-join="auto"<!--
设置父子对象之间是否存在外连接 -->
not-null="true"<!--
指定该属性是否一定为非空 -->
>
<column name="ProvinceID" /><!--
定义父对象(此处指City类对象)所对应的数据库表的外键 -->
</many-to-one>
</class>
</hibernate-mapping>

多对多的双向关联关系(中间表)

2007-06-06 17:26

在多对多的关联关系中,可拆分为两个一对多的关联关系,即在两个表中间增加一个关联表,记录这两个表之间的关联关系。若抛开关联表,则原2个表之间看不出任何的关系。

以为考试类别和考试科目为例,详细讲解在添加关联表的情况下两个表之间的hibernate设置。
考试类别表:exam_sort_enum
id:integer
name:string
考试科目表:subject
id:integer
name:string
考试类别科目关联表
exam_sort_enum_id:integer
对应考试类别表的id
subject_id:integer
对应考试科目表的id


ExamSortEnum.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class
name="model.ExamSortEnum"
table="EXAM_SORT_ENUM"
lazy="false"
>
<id
name="id"
type="integer"
column="ID"
length="22"
>
<generator class="increment" />
</id>

<property
name="name"
type="string"
column="NAME"
length="255"
/>
<set name="subject" table="EXAM_SORT_ENUM_SUBJECT" lazy="true" cascade="save-update">
<key column="exam_sort_enum_id"/>
<many-to-many column="subject_id" class="model.Subject"/>
</set>
</class>
</hibernate-mapping>


ExamSortEnum.java

package model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class ExamSortEnum implements Serializable{


private static final long serialVersionUID = <chmetcnv w:st="on" unitname="l" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1L</chmetcnv>;
private Integer id;
private String name;
private Set subject = new HashSet();

public ExamSortEnum(){}
public ExamSortEnum(Integer id){
setId(id);
}

public void setSubject(Set subject){
this.subject = subject;
}

public Set getSubject(){
return this.subject;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}


关于映射文件:

映射文件要设置set
name=subject
ExamSortEnum.java文件中定义的Set对象,存储多个Subject类型的容器。
table="EXAM_SORT_ENUM_SUBJECT"
为对应的中间表的表名,由于两个业务表之间不能直接打交道,只能通过中间表来进行关联。
lazy="true"
延迟加载
cascade="save-update"
级联保存更新,若设置为alldeleteall-delete-orphans,则在删除一个ExamSortEnum对象时,关联的Subject对象也被删除,而此关联的subject对象可能被其他的为ExamSortEnum对象所引用。
<key column="exam_sort_enum_id"/>
指定中间表中参照为Exam_Sort_Enum表的外键为exam_sort_enum_id
<many-to-many>
column="subject_id" Exam_Sort_Enum
表参照Subject表的外键为subject_id,即Exam_Sort_Enum表通过subject_idSubject表关联
class="model.Subject"
指定setname=subject中存放的是model.Subject对象。


Subject.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class
name="model.Subject"
table="SUBJECT"
lazy="false"
>
<id
name="id"
type="integer"
column="ID"
length="22"
>
<generator class="increment" />
</id>

<property
name="name"
type="string"
column="NAME"
length="200"
/>

<set name="examSortEnum" table="EXAM_SORT_ENUM_SUBJECT" lazy="true" inverse="true" cascade="save-update">
<key column="subject_id"/>
<many-to-many column="exam_sort_enum_id" class="model.ExamSortEnum"/>
</set>
</class>
</hibernate-mapping>

Subject.java

package model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class Subject implements Serializable{

private static final long serialVersionUID = <chmetcnv w:st="on" unitname="l" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1L</chmetcnv>;
private Integer id;
private String name;
private Set examSortEnum = new HashSet();


public Subject(){}
public Subject(Integer id){
setId(id);
}

public void setExamSortEnum(Set examSortEnum){
this.examSortEnum = examSortEnum;
}
public Set getExamSortEnum(){
return this.examSortEnum;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}


关于映射文件:
内容与ExamSortEnum.hbm.xml差不多,只是多了一个inverse="true",告诉hibernate控制权不在此处,两个映射文件只能设置一个。

测试类:
package model;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class ExamSortEnumTest {
public static SessionFactory sf ;

static{
try{
Configuration cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}

public void insert1(){
Session sess = sf.openSession();
Transaction tx = sess.beginTransaction();

Subject sa = new Subject();
sa.setName("A1");

Subject sb = new Subject();
sb.setName("B1");

Subject sc = new Subject();
sc.setName("C1");

ExamSortEnum esea = new ExamSortEnum();
esea.setName("A");
esea.getSubject().add(sa);
esea.getSubject().add(sc);

ExamSortEnum eseb = new ExamSortEnum();
eseb.setName("B");
eseb.getSubject().add(sb);
eseb.getSubject().add(sc);

sess.save(esea);
sess.save(eseb);

tx.commit();
sess.close();

}

public static void main(String[] args){
ExamSortEnumTest et = new ExamSortEnumTest();
et.insert1();
}
}

执行后的结果:
考试类别表:exam_sort_enum
id name
<chmetcnv w:st="on" unitname="a" sourcevalue="3" hasspace="True" negative="False" numbertype="1" tcsc="0">3 A</chmetcnv>
4 B

考试科目表:subject
id name
<chmetcnv w:st="on" unitname="C" sourcevalue="3" hasspace="True" negative="False" numbertype="1" tcsc="0">3 C</chmetcnv>1
<chmetcnv w:st="on" unitname="a" sourcevalue="4" hasspace="True" negative="False" numbertype="1" tcsc="0">4 A</chmetcnv>1
5 B1

考试类别科目关联表
exam_sort_enum_id subject_id
3 3
3 4
4 3
4 5

分享到:
评论

相关推荐

    hibernate配置文件详解

    hibernate.cfg.xml 文件是 Hibernate 的基本配置文件,它包含了 Hibernate 与数据库的基本连接信息。在 Hibernate 工作的初始阶段,这些信息被加载到 Configuration 和 SessionFactory 实例中。该文件的基本结构如下...

    现有Mysql数据库,写Spring + Hibernate的配置文件

    在本案例中,我们将探讨如何在已有的MySQL数据库环境下,配置Spring和Hibernate来实现数据访问层。 首先,我们需要在项目中引入Spring和Hibernate的相关依赖。在Maven或Gradle的构建文件中,添加对应的依赖库,如...

    hibernate完整配置文件

    在这个“hibernate完整配置文件”中,我们将深入探讨如何配置`hibernate.cfg.xml`文件以及相关的应用设置。 `hibernate.cfg.xml`是Hibernate的核心配置文件,它包含了连接数据库所需的所有信息,如数据库URL、...

    hibernate利用配置文件反向生成数据库所有配置文件及方法

    1. **Hibernate配置文件**(hibernate.cfg.xml):这个文件包含了连接数据库所需的基本信息,如数据库URL、用户名、密码等。 2. **实体关系数据库映射文件**(.hbm.xml):这些文件定义了Java类与数据库表之间的映射...

    Hibernate基本配置演示

    **Hibernate基本配置演示** 在Java开发中,Hibernate是一款强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用Java对象来处理数据。这篇教程将深入讲解Hibernate的基本配置过程,确保你能顺利...

    代码自动生成工具 hibernate配置文件工具 MagicalTools

    《代码自动生成工具 Hibernate配置文件工具 MagicalTools 深度解析》 在现代软件开发过程中,提高效率和减少重复劳动是至关重要的。为此,开发者们不断寻求自动化工具的帮助,以简化繁琐的任务,如代码编写、配置...

    hibernate基本配置要用到的包

    以下是一些关于Hibernate基本配置和所需JAR包的详细解释: 1. **Hibernate Core**: 这是Hibernate的核心库,包含了所有必要的API和实现,如SessionFactory、Session、Transaction等。在`hibernate-core-x.x.x.Final...

    hibernate的配置文件

    《Hibernate配置文件详解与必备库解析》 在Java开发领域,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,要充分利用Hibernate的功能,理解其配置文件和依赖库至关重要。本文将...

    根据数据库表生成实体、hibernate配置文件和实体映射文件

    本教程将深入讲解如何根据数据库表自动生成实体类、Hibernate配置文件以及实体映射文件。 首先,我们需要了解Hibernate的基本概念。Hibernate提供了一个在Java应用中使用的持久化模型,它允许开发者用面向对象的...

    hibernate基本配置及使用方法

    【hibernate基本配置及使用方法】 Hibernate是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与关系数据库之间的交互。本教程将详细解释Hibernate的基本配置和使用步骤,帮助初学者快速掌握这一强大...

    Hibernate配置文件

    ### Hibernate配置文件详解 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库交互的过程。在使用Hibernate的过程中,一个关键的配置文件是`hibernate.cfg.xml`。这个文件...

    Eclipse Hibernate基本配置及简单实现

    **Eclipse Hibernate基本配置及简单实现** 在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使得开发者可以专注于业务逻辑而不是数据库层面的细节。本篇将介绍如何在Eclipse环境中配置和...

    hibernate配置文件hibernate.cfg.xml的详细解释

    ### Hibernate配置文件hibernate.cfg.xml的详细解释 #### 一、引言 在Java持久化框架Hibernate中,`hibernate.cfg.xml`是核心配置文件之一,它用于配置Hibernate的运行环境,包括数据库连接信息、性能参数以及其他...

    hibernate基本jar包

    在实际应用中,还需要配置Hibernate的主配置文件(hibernate.cfg.xml),指定数据库连接信息、方言、缓存策略等。同时,每个实体类也需要相应的映射文件(.hbm.xml)或使用注解进行映射。 总的来说,这个"hibernate...

    hibernate4基本配置方式详解

    总之,Hibernate 4 的基本配置包括了XML配置文件、编程式配置、数据库连接方式(JDBC或DataSource)、连接池配置以及事务管理。理解并熟练掌握这些配置方法对于高效使用 Hibernate 进行数据库操作至关重要。

    Hibernate入门(配置文件+增删改查)

    在这个“Hibernate入门”教程中,我们将深入探讨Hibernate的基本概念、配置文件以及如何进行增删改查操作。 首先,Hibernate的核心是其配置文件(通常命名为`hibernate.cfg.xml`),这是连接数据库的关键。配置文件...

    AutoCode_SSHDemo_Setup自动生成HIBERNATE 配置文件 JAVA代码自动生成

    标题中的"AutoCode_SSHDemo_Setup自动生成HIBERNATE 配置文件 JAVA代码自动生成"表明这是一个关于自动化代码生成的工具,主要用于简化Hibernate配置文件和Java代码的编写过程。SSH在这里指的是Spring、Struts和...

    JAVA 使用hibernate配置实例

    3. 配置Hibernate:创建一个hibernate.cfg.xml配置文件,设置数据库连接信息(如URL、用户名、密码)、JDBC驱动、方言等。 4. 初始化SessionFactory:在代码中通过Configuration类加载配置文件,然后创建...

Global site tag (gtag.js) - Google Analytics