以《商品案例数据库为例》
首先
商品案例数据库设计:
管理员表:
id :递增序列
name :管理员
pass :密码
客户表
id :递增序列
name :登录名称
pass :登录密码
sex : 性别 //enum
email :注册邮箱
rdate :注册日期 //BeanUtils
state :是否被激活的状态 0 1
商品表
id :递增序列
name : 商品的名称
type : 商品的类型
price :商品的价格
订单表:
Id :递增序列
number :订单编号
customerid :客户名称
odate :订单时间
state :订单的状态 //已发货 未发货 0 1
ostate :确认订单是否订购 0 1
订单明细表
id
goodid :商品的名称
num :商品数量
total :商品的总价格
ordersid :订单
一张订单可以有多个商品,一个商品可以有多个订单
所以:订单表和商品表是多对多的关系
一个顾客可以有多个订单,一个订单只能属于一个顾客
所以:顾客表和订单表是一对多的关系
要实现Hibernate实体映射首先要导入hibernate所需要的包
接下来用hibernate的映射实现数据表的生成
首先先生成管理员表
代码如下:
public class Admin implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String pass;
public Admin() {}
public Admin(String name, String pass) {
this.name = name;
this.pass = pass;
}
省略 Get,set方法
}
映射文件中的代码:
<hibernate-mapping>
<class name="cn.csdn.domain.Admin" table="admins" catalog="db">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string" length="30"/>
<property name="pass" type="string" length="12"/>
</class>
</hibernate-mapping>
接下来生成顾客表和订单表
顾客表:顾客表和订单表是一对多的关系
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String pass;
private Sex sex; //enum
private String email;
private Date rdate; //BeanUtils
private int state;
private Set<Orders> orders = new HashSet<Orders>();
public Customer(String name, String pass, Sex sex, String email,
Date rdate, int state, Set<Orders> orders) {
this.name = name;
this.pass = pass;
this.sex = sex;
this.email = email;
this.rdate = rdate;
this.state = state;
this.orders = orders;
}
public Customer() {}
省略 Get,set方法
}
映射文件中的代码:
<class name="cn.csdn.domain.Customer" table="customers" catalog="db">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string" length="30" />
<property name="pass" type="string" length="12" />
<property name="sex" type="string" length="4" />
<property name="email" type="string" length="30" />
<property name="rdate" type="timestamp" />
<property name="state" type="integer" />
<set name="orders" table="orders">
<key column="cid" />//cid是订单表的外键,顾客表的主键
<one-to-many class="cn.csdn.domain.Orders" />
</set>
</class>
订单表:
顾客表和订单表是一对多的关系;
订单表和商品表是多对多的关系,所以要加一个表,变成两一对多的实体映射
订单表和订单明细表是一对多的关系,商品表和订单明细表是一对多的关系
所以就加了一个订单明细表
public class Orders implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String number;
private Customer customer;
private Date odate;
private int state;
private int Qstate;
private Set<OrdersItem> ordersItem = new HashSet<OrdersItem>();
public Orders() { }
public Orders(int id, String number, Customer customer, Date odate,
int state, int qstate, Set<OrdersItem> ordersItem) {
this.id = id;
this.number = number;
this.customer = customer;
this.odate = odate;
this.state = state;
Qstate = qstate;
this.ordersItem = ordersItem;
}
省略 Get,set方法
}
映射文件中的代码:
<class name="cn.csdn.domain.Orders" table="orders" catalog="db">
<id name="id">
<generator class="native"/>
</id>
<property name="number" type="string" length="30"/>
<many-to-one name="customer"
class="cn.csdn.domain.Customer" column="cid"/>
//订单表和顾客表是多对一的关系
<property name="odate" type="timestamp" />
<property name="state" type="integer" />
<property name="Qstate" type="integer" />
<set name="ordersItem">
<key column="oid"/>//订单明细表中的oid外键是订单表的主键
<one-to-many class="cn.csdn.domain.OrdersItem"/>
//订单表和订单明细表是一对多的关系
</set>
</class>
商品表:
一张订单可以有多个商品,一个商品可以有多个订单
所以:订单表和商品表是多对多的关系
订单明细表和商品表是多对一的关系
public class Goods implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String type;
private double price;
private Set<OrdersItem> ordersItem = new HashSet<OrdersItem>();
public Goods() {}
public Goods(String name, String type, double price,
Set<OrdersItem> ordersItem) {
this.name = name;
this.type = type;
this.price = price;
this.ordersItem = ordersItem;
}
省略 Get,set方法
}
映射文件中的代码:
<class name="cn.csdn.domain.Goods" table="goods" catalog="db">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string" length="50"/>
<property name="type" type="string" length="40"/>
<property name="price" type="double"/>
<set name="ordersItem">
<key column="gid"/>
<one-to-many class="cn.csdn.domain.OrdersItem"/>
</set>
</class>
订单明细表:
public class OrdersItem implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private Goods goods;
private int num;
private double total;
private Orders orders;
public OrdersItem() {}
public OrdersItem(Goods goods, int num, double total, Orders orders){
this.goods = goods;
this.num = num;
this.total = total;
this.orders = orders;
}
省略 Get,set方法
}
映射文件中的代码:
<class name="cn.csdn.domain.OrdersItem" table="ordersItems"
catalog="db">
<id name="id">
<generator class="native" />
</id>
<many-to-one name="goods" class="cn.csdn.domain.Goods"
column="gid" />
<property name="num" type="integer" />
<property name="total" type="double" />
<many-to-one name="orders" class="cn.csdn.domain.Orders"
column="oid" />
</class>
总结:一方主键做多方外键,一方用set集合多方用一方对象
分享到:
相关推荐
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来...通过实践这些实例代码,可以加深对Hibernate实体映射的理解,并提升数据库操作的效率。
### Hibernate实体映射文件字段设置默认值 在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...
本教程将深入讲解如何根据数据库表自动生成实体类、Hibernate配置文件以及实体映射文件。 首先,我们需要了解Hibernate的基本概念。Hibernate提供了一个在Java应用中使用的持久化模型,它允许开发者用面向对象的...
"数据库表映射成实体类"是一种常见的做法,它允许我们通过对象-关系映射(ORM)技术将数据库中的表格结构转化为Java类,这些类通常被称为JavaBean。这种映射过程大大简化了数据操作,使得开发人员可以使用面向对象的...
4. 在使用 MyEclipse 自动生成 Hibernate 映射文件和实体类时,需要创建数据库连接和相应的表,然后选择需要添加 Hibernate 映像文件的工程,最后进行反转工程操作。 使用 MyEclipse 自动生成 Hibernate 映射文件和...
本文将深入探讨如何在MyEclipse 2014环境中利用Hibernate 3这一强大的ORM(对象关系映射)框架,生成数据库实体类和XML映射文件。这将帮助开发者有效地将Java对象与数据库表进行绑定,实现数据的透明操作。 首先,...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
在提供的压缩包`FanxiangShengCheng`中,可能包含了具体的实体类、映射文件以及示例代码,用于演示如何通过Hibernate映射文件生成数据库。案例可能会展示如何配置Hibernate环境,如何编写映射文件,以及如何运行`...
在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate提供了四种继承策略:单表继承(Single Table Inheritance)、联合继承( Joined Table Inheritance)、表...
Myeclipse 自动生成 Hibernate 配置文件及实体类映射 ORM 配置文件 Myeclipse 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能来简化软件开发过程。在这个示例中,我们将展示如何使用 Myeclipse 自动...
而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...
1. **对象关系映射**:Hibernate通过XML映射文件或注解,将数据库表与Java对象对应起来,实现了数据库操作的对象化,使得开发者可以像操作普通Java对象一样操作数据库记录。 2. **查询语言(HQL)**:Hibernate提供...
在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...
总结,Hibernate实体层设计是Java开发中非常重要的一环,理解并熟练掌握实体的定义、属性映射和关联映射,以及如何在实际项目中运用,能够极大地提升开发效率和代码质量。在设计实体层时,应充分考虑业务需求,合理...
这个“Hibernate映射数据库表插件”是为了帮助开发者更方便地管理和操作数据库表而设计的。通过使用此插件,开发人员可以轻松地将数据库表映射为Java类,实现数据的持久化。 【描述】:“NULL” 由于描述为空,...
在Java企业级开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中...
映射文件是Hibernate中的关键元素,它定义了Java实体类与数据库表之间的对应关系。本主题将深入探讨如何根据Java实体类自动生成Hibernate的映射文件,这对于不使用MyEclipse等集成开发环境的开发者来说尤其实用。 ...
其中,集合映射是Hibernate中非常关键的概念,它允许我们将数据库中的表行映射到Java对象的集合。本文将深入探讨Hibernate集合映射的各个方面,帮助读者理解并熟练运用这一功能。 首先,我们需要了解什么是集合。在...
《hibernate数据库映射例子.zip》这个压缩包包含了几个基于Hibernate框架的数据库映射示例,旨在帮助初学者理解并掌握如何在实际项目中应用Hibernate进行数据持久化操作。Hibernate是一个强大的Java对象关系映射...