今天想结合自己所做的例子,来介绍一下在struts2+hibernate+spring的整合下,如何配置hibernate的关系映射的映射文件.
关系映射有几种情况,分别是单向N-1(多对一)的关系映射,单向1-1(一对一)的关系映射,单向1-N(一对多)的关系映射,单向N-N(多对多)的关系映射,还有双向1-N(一对多)的关系映射,双向N-N(多对多)的关系映射以及双向1-1(一对一)的关系映射.
下面结合实例来分析一下单向一对一和双向一对多的关系映射:
以下只列出三张数据库表来分析,如下:
一、会员信息表(userinfo)
字段名称 逻辑意义 格式 约束条件
ui_ID 会员编号 int 主键
ui_nick 登录名 Varchar(20) not null
ui_Sex 性别 boolean 默认true
ui_Password 密码 Varchar(20) not null
ui_Integral 积分 int(11) 默认0
ui_level 级别 int(2) 1:管理员2.站长3.vip 4.会员
ui_COID 学校ID int(11) 外键
二、商店信息表(shopinfo)
字段名称 逻辑意义 格式 约束条件
si_UID 商店编号 Int 主键也是外键(UIID)
si_Address 店铺地址 Varchar(20) not null
si_Name 店铺名称 Varchar(20) not null
Si_describe 店铺描述 Varchar(4000) not null
Si_Date 开店日期 dateTime not null
si_InSchool 是否学校推荐 boolean 默认False
si_IsInHead 是否首页推荐 Boolean 默认False
si_Fsore 是 否为专卖店 Boolean 默认False
三、学校表(college)
字段名称 逻辑意义 格式 约束条件
co_ID 学校编号 Int 主键
co_Name 学校名称 Varchar(20) 唯一
co_Logo 学校图标 Varchar(50) not null
以上的三个表的关系是这样的:
(1)一个会员(userinfo 表)只能申请一间店铺(shopinfo 表),即会员实体与店铺实体 之间存在一对一的关系,并且这里用的是单向的一对一的关系映射,因为shopinf(si_UID) 主键是userinfo的外键(也就是说,会员表的主键也在店铺表里做主键,但是有先后顺序,因此只有注册了会员才能申请店铺),而且我只需要单向地通过会员表的主键(ui_ID)去查询对应的店铺信息即可,而不需要反过来查询.
(2)一间学校(college 表)拥有多个学生(即会员userinfo 表),一个学生就读一间学校,所以学校实体与学生实体之间存在一对多的关系,并且这里用的是双向的一对多的关系映射,因为这里需要双向查询.在这种一对多的实体关系里,我们应该将关系为一的一方的ID(即学校ID)放到多的一方(即会员)的表里进行外键的关联..
(3)一间学校(college 表)管理多间店铺,一间店铺属于一间学校.这里与上面第二点一样,也是双向一对多的关系映射,原因同理.(不过这里大家可以不让学校与店铺直接关联,而是通过会员表为中间表进行间接的关联,也可以使得三个实体之间联成一个整体,不过可能在查询效率上会慢一些.)
下面是model层的三个实体类(实体类的定义是根据上面分析的三个表的实体之间的关系和表所拥有的属性来设计的):
1.userinfo表的实体
package com.flybaba.model;
import java.util.HashSet;
import java.util.Set;
public class UserInfo implements java.io.Serializable {
private Integer uiID;
private String uiNick;
private String uiPassword;
private Integer uiIntegral;
private Integer uiLevel;
private College college;
public String getUiNick() {
return uiNick;
}
public void setUiNick(String uiNick) {
this.uiNick = uiNick;
}
public String getUiPassword() {
return uiPassword;
}
public void setUiPassword(String uiPassword) {
this.uiPassword = uiPassword;
}
public Integer getUiIntegral() {
return uiIntegral;
}
public void setUiIntegral(Integer uiIntegral) {
this.uiIntegral = uiIntegral;
}
public Integer getUiLevel() {
return uiLevel;
}
public void setUiLevel(Integer uiLevel) {
this.uiLevel = uiLevel;
}
public boolean isUiSex() {
return uiSex;
}
public void setUiSex(boolean uiSex) {
this.uiSex = uiSex;
}
public College getCollege() {
return college;
}
public void setCollege(College college) {
this.college = college;
}
public Integer getUiID() {
return uiID;
}
public void setUiID(Integer uiID) {
this.uiID = uiID;
}
}
2.shopinfo表的实体
package com.flybaba.model;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class ShopInfo implements java.io.Serializable {
private Integer siUID;
private String siAddress;
private String siName;
private String siDescribe;
private Date siDate;
private boolean siIsInSchool;
private boolean siIsInHead;
private boolean siFsore;
private College college;
private UserInfo userInfo;
public String getSiAddress() {
return siAddress;
}
public void setSiAddress(String siAddress) {
this.siAddress = siAddress;
}
public String getSiName() {
return siName;
}
public void setSiName(String siName) {
this.siName = siName;
}
public String getSiDescribe() {
return siDescribe;
}
public void setSiDescribe(String siDescribe) {
this.siDescribe = siDescribe;
}
public Integer getSiHonor() {
return siHonor;
}
public void setSiHonor(Integer siHonor) {
this.siHonor = siHonor;
}
public Date getSiDate() {
return siDate;
}
public void setSiDate(Date siDate) {
this.siDate = siDate;
}
public College getCollege() {
return college;
}
public void setCollege(College college) {
this.college = college;
}
public boolean isSiIsInSchool() {
return siIsInSchool;
}
public void setSiIsInSchool(boolean siIsInSchool) {
this.siIsInSchool = siIsInSchool;
}
public boolean isSiIsInHead() {
return siIsInHead;
}
public void setSiIsInHead(boolean siIsInHead) {
this.siIsInHead = siIsInHead;
}
public boolean isSiFsore() {
return siFsore;
}
public void setSiFsore(boolean siFsore) {
this.siFsore = siFsore;
}
public UserInfo getUserInfo() {
return userInfo;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
public Integer getSiUID() {
return siUID;
}
public void setSiUID(Integer siUID) {
this.siUID = siUID;
}
}
3.college表的实体
package com.flybaba.model;
import java.util.HashSet;
import java.util.Set;
public class College implements java.io.Serializable {
private Integer coID;
private String coName;
private String coLogo;
private Set<ShopInfo> shopInfoSet = new HashSet<ShopInfo>();
private Set<UserInfo> userInfoSet = new HashSet<UserInfo>();
public Integer getCoID() {
return coID;
}
public void setCoID(Integer coID) {
this.coID = coID;
}
public String getCoName() {
return coName;
}
public void setCoName(String coName) {
this.coName = coName;
}
public String getCoLogo() {
return coLogo;
}
public void setCoLogo(String coLogo) {
this.coLogo = coLogo;
}
public Set<ShopInfo> getShopInfoSet() {
return shopInfoSet;
}
public void setShopInfoSet(Set<ShopInfo> shopInfoSet) {
this.shopInfoSet = shopInfoSet;
}
public Set<UserInfo> getUserInfoSet() {
return userInfoSet;
}
public void setUserInfoSet(Set<UserInfo> userInfoSet) {
this.userInfoSet = userInfoSet;
}
}
下面是来配置上面的单向一对一和双向一对多的关系映射的映射文件
(关系映射的映射文件设计是参照上面定义的model层的三个实体类),如下:
一.
1.映射文件名:UserInfo.hbm.xml
2.映射文件内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.flybaba.model">
<class name="UserInfo" table="userinfo">
<id name="uiID" type="integer" column="ui_ID">
<generator class="increment" />
</id>
<property name="uiNick" column="ui_Nick" type="string"
not-null="true" length="20" />
<property name="uiPassword" column="ui_Password" type="string"
not-null="true" length="30" />
<property name="uiIntegral" column="ui_Integral" type="integer"
not-null="false" length="30" />
<property name="uiLevel" column="ui_Level" type="integer"
not-null="false" length="2" />
<property name="uiSex" column="ui_Sex" type="boolean"
not-null="true" length="2" />
<many-to-one name="college" column="ui_COID" class="College"
not-null="true" lazy="false" />
</class>
</hibernate-mapping>
二.
1.映射文件名:ShopInfo.hbm.xml
2.映射文件内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.flybaba.model">
<class name="ShopInfo" table="shopinfo" >
<id name="siUID" type="integer" column="si_UID" >
<generator class="foreign">
<param name="property">userInfo</param>
</generator>
</id>
<property name="siAddress" column="si_Address" type="string" not- null="true" length="100"/>
<property name="siName" column="si_Name" type="string" not- null="true" length="30"/>
<property name="siDescribe" column="si_Describe" type="string" not-null="true" length="2048"/>
<property name="siHonor" column="si_Honor" type="integer" not- null="true" length="9"/>
<property name="siDate" column="si_Date" type="date" not-null="true" length="20"/>
<property name="siIsInSchool" column="si_IsInSchool" type="java.lang.Boolean" not-null="true" length="2"/>
<property name="siIsInHead" column="si_IsInHead" type="java.lang.Boolean" not-null="true" length="2"/>
<property name="siFsore" column="si_Fsore" type="java.lang.Boolean" not-null="true" length="2"/>
<many-to-one name="college" column="si_COID" class="College" not-null="true" lazy="false"/>
<one-to-one name="userInfo" constrained="true"/>
</class>
</hibernate-mapping>
三.
1.映射文件名:College.hbm.xml
2.映射文件内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.flybaba.model">
<class name="College" table="college" >
<id name="coID" type="integer" column="co_ID">
<generator class="increment"/>
</id>
<property name="coName" column="co_Name" type="string" not- null="true" length="20"/>
<property name="coLogo" column="co_Logo" type="string" not- null="true" length="50"/>
<set name="shopInfoSet" inverse="true">
<key column="si_COID"/>
<one-to-many class="ShopInfo" />
</set>
<set name="userInfoSet" inverse="true">
<key column="ui_COID"/>
<one-to-many class="UserInfo" />
</set>
</class>
</hibernate-mapping>
到此为止,配置完成.
分享到:
相关推荐
"Hibernate映射配置实例大全"是一个全面深入的资源,旨在帮助开发者理解和掌握如何有效地配置Hibernate以实现对象关系映射(ORM)。在这个文档中,我们将探讨各种关键的映射配置方法,以及相关的实例。 首先,我们...
标题“Hibernate对象关系映射实例”表明我们将探讨的是使用Hibernate框架进行对象关系映射(ORM)的实际应用。ORM是将数据库表结构映射为Java类对象的一种技术,它使得开发者可以使用面向对象的方式来操作数据库,而...
在Java企业级开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中...
在Hibernate中,我们通过配置XML映射文件或使用注解来实现这种关系。 **二、配置“多对一”关系** 1. **XML映射方式:** 在Hibernate的.hbm.xml映射文件中,我们可以为多的一方添加`<many-to-one>`标签,指定目标...
本实例主要探讨的是Hibernate的高级映射技术,包括单向一对一、单向多对一、单向一对多以及单向多对多这四种关系映射。 首先,我们来理解一下什么是映射。在Hibernate中,映射是将对象模型与关系数据库之间的桥梁,...
### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...
在本实例中,我们将深入探讨如何使用XML配置文件来实现Hibernate的表映射。 首先,Hibernate的XML配置文件通常被称为`hibernate.cfg.xml`,它是连接数据库、定义SessionFactory等核心设置的地方。在这个文件中,...
标题“Hibernate映射关系配置:XML方式和注解方式”涉及到的是Java持久层框架Hibernate中的一个重要概念——对象关系映射(ORM)。在这个主题中,我们将探讨如何通过XML映射文件和注解来配置Hibernate实体之间的关系...
确保数据库与Hibernate映射文件一致,能正确地反映实体之间的关系。导入DBO到SQL Server数据库后,就可以通过Hibernate的Session接口进行CRUD(创建、读取、更新、删除)操作了。 在开发过程中,理解并熟练运用这些...
在提供的压缩包中,包含了不同类型的Hibernate关系映射配置示例代码,如“一对多.rar”、“多对一或双向一对多.rar”和“多对多.rar”。这些示例可以帮助开发者更好地理解和实践各种关系映射的配置方法。通过深入...
2. **配置SessionFactory**:Spring会根据Hibernate的配置文件创建SessionFactory,这是Hibernate的核心对象,用于生成Session实例。 3. **配置事务管理器**:Spring需要知道如何管理事务,这通常通过...
Hibernate提供了一种基于XML或注解的方式来进行关系映射配置。 **二、Hibernate关系映射的类型** 1. **一对一(OneToOne)**: 表示一个实体对应另一个实体的唯一实例。这可以通过在两个类中都定义`@OneToOne`注解...
《Hibernate集合映射详解》 Hibernate作为Java领域中的一款强大持久化框架,其核心功能之一就是对象关系映射(ORM),使得开发者可以...在实践中,不断调整和优化映射配置,能够进一步提升应用程序的性能和可维护性。
在IT行业中,SpringMVC、Hibernate和定时器是三个非常重要的技术组件,...以上就是SpringMVC、Hibernate和定时器整合的基本概念和配置实例。这样的组合在实际开发中非常常见,可以方便地构建出高效、可维护的Web应用。
综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一和一对多的关系配置,以及如何在Spring+Hibernate+Struts环境中应用这些关系。对于想要深入理解Hibernate并提升开发效率的Java...
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本资源“Hibernate实体映射”提供了一个深入理解这一关键概念的机会,通过...
5. **配置Hibernate映射文件**:虽然在JPA中可以直接使用注解进行配置,但在一些情况下,你可能还需要为每个实体创建对应的Hibernate XML映射文件,以进一步自定义映射细节。 6. **数据操作**:在实际应用中,你...
在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射中的组件映射。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它允许开发人员以面向对象的方式处理数据库操作,极大地简化了数据层...
总结,Hibernate的关联关系映射是其强大的功能之一,通过合理的配置,我们可以轻松地在Java对象和数据库表之间建立复杂的关系,实现对象的持久化。理解并熟练运用这些映射方式,对于提升Java应用的数据管理效率至关...