`
yinghuayu1324117
  • 浏览: 69559 次
  • 性别: Icon_minigender_2
  • 来自: 保定
文章分类
社区版块
存档分类

数据库的设计及hibernate实体映射

阅读更多

以《商品案例数据库为例》

首先

商品案例数据库设计:

管理员表:

        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集合多方用一方对象

 

1
1
分享到:
评论

相关推荐

    Hibernate实体映射

    在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来...通过实践这些实例代码,可以加深对Hibernate实体映射的理解,并提升数据库操作的效率。

    hibernate实体映射文件字段设置默认值

    ### Hibernate实体映射文件字段设置默认值 在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...

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

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

    数据库表映射成实体类

    "数据库表映射成实体类"是一种常见的做法,它允许我们通过对象-关系映射(ORM)技术将数据库中的表格结构转化为Java类,这些类通常被称为JavaBean。这种映射过程大大简化了数据操作,使得开发人员可以使用面向对象的...

    自动生成hibernate映射文件和实体类

    4. 在使用 MyEclipse 自动生成 Hibernate 映射文件和实体类时,需要创建数据库连接和相应的表,然后选择需要添加 Hibernate 映像文件的工程,最后进行反转工程操作。 使用 MyEclipse 自动生成 Hibernate 映射文件和...

    MyEclipse 2014 使用hibernate3 生成数据库实体类 和 xml映射文件

    本文将深入探讨如何在MyEclipse 2014环境中利用Hibernate 3这一强大的ORM(对象关系映射)框架,生成数据库实体类和XML映射文件。这将帮助开发者有效地将Java对象与数据库表进行绑定,实现数据的透明操作。 首先,...

    hibernate 映射关系学习入门 多对多实体映射

    本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...

    hibernate映射文件生成数据库

    在提供的压缩包`FanxiangShengCheng`中,可能包含了具体的实体类、映射文件以及示例代码,用于演示如何通过Hibernate映射文件生成数据库。案例可能会展示如何配置Hibernate环境,如何编写映射文件,以及如何运行`...

    Hibernate继承映射代码

    在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate提供了四种继承策略:单表继承(Single Table Inheritance)、联合继承( Joined Table Inheritance)、表...

    Myeclipse自动生成Hibernate配置文件及实体类映射ORM

    Myeclipse 自动生成 Hibernate 配置文件及实体类映射 ORM 配置文件 Myeclipse 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能来简化软件开发过程。在这个示例中,我们将展示如何使用 Myeclipse 自动...

    JAVA数据类型与Hibernate的类型映射

    而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...

    Spring+Hibernate 自动映射

    1. **对象关系映射**:Hibernate通过XML映射文件或注解,将数据库表与Java对象对应起来,实现了数据库操作的对象化,使得开发者可以像操作普通Java对象一样操作数据库记录。 2. **查询语言(HQL)**:Hibernate提供...

    hibernate学习入门一对多实体映射源码

    在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...

    Hibernate实体层设计

    总结,Hibernate实体层设计是Java开发中非常重要的一环,理解并熟练掌握实体的定义、属性映射和关联映射,以及如何在实际项目中运用,能够极大地提升开发效率和代码质量。在设计实体层时,应充分考虑业务需求,合理...

    Hibernate 映射数据库表插件

    这个“Hibernate映射数据库表插件”是为了帮助开发者更方便地管理和操作数据库表而设计的。通过使用此插件,开发人员可以轻松地将数据库表映射为Java类,实现数据的持久化。 【描述】:“NULL” 由于描述为空,...

    hibernate关联映射实例

    在Java企业级开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中...

    java根据实体类生成Hibernate映射文件

    映射文件是Hibernate中的关键元素,它定义了Java实体类与数据库表之间的对应关系。本主题将深入探讨如何根据Java实体类自动生成Hibernate的映射文件,这对于不使用MyEclipse等集成开发环境的开发者来说尤其实用。 ...

    [原]Hibernate集合映射

    其中,集合映射是Hibernate中非常关键的概念,它允许我们将数据库中的表行映射到Java对象的集合。本文将深入探讨Hibernate集合映射的各个方面,帮助读者理解并熟练运用这一功能。 首先,我们需要了解什么是集合。在...

    hibernate数据库映射例子.zip

    《hibernate数据库映射例子.zip》这个压缩包包含了几个基于Hibernate框架的数据库映射示例,旨在帮助初学者理解并掌握如何在实际项目中应用Hibernate进行数据持久化操作。Hibernate是一个强大的Java对象关系映射...

Global site tag (gtag.js) - Google Analytics