数据库的设计及hibernate实体映射 【转】
2013-11-29 19:05
507 查看
以《商品案例数据库为例》
首先
商品案例数据库设计:
管理员表: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的映射实现数据表的生成
首先先生成管理员表代码如下:publicclass Admin implements Serializable{privatestaticfinallongserialVersionUID = 1L;privateintid;private String name;private String pass;public Admin() {}public Admin(String name, String pass) {this.name = name;this.pass = pass;}省略Get,set方法}映射文件中的代码:<hibernate-mapping><classname="cn.csdn.domain.Admin"table="admins"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="name"type="string"length="30"/><propertyname="pass"type="string"length="12"/></class></hibernate-mapping>接下来生成顾客表和订单表
顾客表:顾客表和订单表是一对多的关系
publicclass Customer implements Serializable {privatestaticfinallongserialVersionUID = 1L;privateintid;private String name;private String pass;private Sex sex; //enum
private String email;private Date rdate; //BeanUtils
privateintstate;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方法}映射文件中的代码:<classname="cn.csdn.domain.Customer"table="customers"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="name"type="string"length="30"/><propertyname="pass"type="string"length="12"/><propertyname="sex"type="string"length="4"/><propertyname="email"type="string"length="30"/><propertyname="rdate"type="timestamp"/><propertyname="state"type="integer"/><setname="orders"table="orders"><keycolumn="cid"/>//cid是订单表的外键,顾客表的主键<one-to-manyclass="cn.csdn.domain.Orders"/></set></class>订单表:顾客表和订单表是一对多的关系;订单表和商品表是多对多的关系,所以要加一个表,变成两一对多的实体映射
订单表和订单明细表是一对多的关系,商品表和订单明细表是一对多的关系
所以就加了一个订单明细表publicclass Orders implements Serializable{privatestaticfinallongserialVersionUID = 1L;privateintid;private String number;private Customer customer;private Date odate;privateintstate;privateintQstate;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方法}映射文件中的代码:<classname="cn.csdn.domain.Orders"table="orders"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="number"type="string"length="30"/><many-to-onename="customer"class="cn.csdn.domain.Customer"column="cid"/>//订单表和顾客表是多对一的关系<propertyname="odate"type="timestamp"/><propertyname="state"type="integer"/><propertyname="Qstate"type="integer"/><setname="ordersItem"><keycolumn="oid"/>//订单明细表中的oid外键是订单表的主键<one-to-manyclass="cn.csdn.domain.OrdersItem"/>//订单表和订单明细表是一对多的关系</set></class>
商品表:一张订单可以有多个商品,一个商品可以有多个订单所以:订单表和商品表是多对多的关系订单明细表和商品表是多对一的关系publicclass Goods implements Serializable {privatestaticfinallongserialVersionUID = 1L;privateintid;private String name;private String type;privatedoubleprice;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方法
}映射文件中的代码:<classname="cn.csdn.domain.Goods"table="goods"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="name"type="string"length="50"/><propertyname="type"type="string"length="40"/><propertyname="price"type="double"/><setname="ordersItem"><keycolumn="gid"/><one-to-manyclass="cn.csdn.domain.OrdersItem"/></set></class>
订单明细表:publicclass OrdersItem implements Serializable{privatestaticfinallongserialVersionUID = 1L;privateintid;private Goods goods;privateintnum;privatedoubletotal;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方法}映射文件中的代码:<classname="cn.csdn.domain.OrdersItem"table="ordersItems"catalog="db"><idname="id"><generatorclass="native"/></id><many-to-onename="goods"class="cn.csdn.domain.Goods"column="gid"/><propertyname="num"type="integer"/><propertyname="total"type="double"/><many-to-onename="orders"class="cn.csdn.domain.Orders"column="oid"/></class>总结:一方主键做多方外键,一方用set集合多方用一方对象
首先
商品案例数据库设计:
管理员表: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的映射实现数据表的生成
首先先生成管理员表代码如下:publicclass Admin implements Serializable{privatestaticfinallongserialVersionUID = 1L;privateintid;private String name;private String pass;public Admin() {}public Admin(String name, String pass) {this.name = name;this.pass = pass;}省略Get,set方法}映射文件中的代码:<hibernate-mapping><classname="cn.csdn.domain.Admin"table="admins"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="name"type="string"length="30"/><propertyname="pass"type="string"length="12"/></class></hibernate-mapping>接下来生成顾客表和订单表
顾客表:顾客表和订单表是一对多的关系
publicclass Customer implements Serializable {privatestaticfinallongserialVersionUID = 1L;privateintid;private String name;private String pass;private Sex sex; //enum
private String email;private Date rdate; //BeanUtils
privateintstate;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方法}映射文件中的代码:<classname="cn.csdn.domain.Customer"table="customers"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="name"type="string"length="30"/><propertyname="pass"type="string"length="12"/><propertyname="sex"type="string"length="4"/><propertyname="email"type="string"length="30"/><propertyname="rdate"type="timestamp"/><propertyname="state"type="integer"/><setname="orders"table="orders"><keycolumn="cid"/>//cid是订单表的外键,顾客表的主键<one-to-manyclass="cn.csdn.domain.Orders"/></set></class>订单表:顾客表和订单表是一对多的关系;订单表和商品表是多对多的关系,所以要加一个表,变成两一对多的实体映射
订单表和订单明细表是一对多的关系,商品表和订单明细表是一对多的关系
所以就加了一个订单明细表publicclass Orders implements Serializable{privatestaticfinallongserialVersionUID = 1L;privateintid;private String number;private Customer customer;private Date odate;privateintstate;privateintQstate;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方法}映射文件中的代码:<classname="cn.csdn.domain.Orders"table="orders"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="number"type="string"length="30"/><many-to-onename="customer"class="cn.csdn.domain.Customer"column="cid"/>//订单表和顾客表是多对一的关系<propertyname="odate"type="timestamp"/><propertyname="state"type="integer"/><propertyname="Qstate"type="integer"/><setname="ordersItem"><keycolumn="oid"/>//订单明细表中的oid外键是订单表的主键<one-to-manyclass="cn.csdn.domain.OrdersItem"/>//订单表和订单明细表是一对多的关系</set></class>
商品表:一张订单可以有多个商品,一个商品可以有多个订单所以:订单表和商品表是多对多的关系订单明细表和商品表是多对一的关系publicclass Goods implements Serializable {privatestaticfinallongserialVersionUID = 1L;privateintid;private String name;private String type;privatedoubleprice;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方法
}映射文件中的代码:<classname="cn.csdn.domain.Goods"table="goods"catalog="db"><idname="id"><generatorclass="native"/></id><propertyname="name"type="string"length="50"/><propertyname="type"type="string"length="40"/><propertyname="price"type="double"/><setname="ordersItem"><keycolumn="gid"/><one-to-manyclass="cn.csdn.domain.OrdersItem"/></set></class>
订单明细表:publicclass OrdersItem implements Serializable{privatestaticfinallongserialVersionUID = 1L;privateintid;private Goods goods;privateintnum;privatedoubletotal;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方法}映射文件中的代码:<classname="cn.csdn.domain.OrdersItem"table="ordersItems"catalog="db"><idname="id"><generatorclass="native"/></id><many-to-onename="goods"class="cn.csdn.domain.Goods"column="gid"/><propertyname="num"type="integer"/><propertyname="total"type="double"/><many-to-onename="orders"class="cn.csdn.domain.Orders"column="oid"/></class>总结:一方主键做多方外键,一方用set集合多方用一方对象
相关文章推荐
- 数据库的设计及hibernate实体映射
- Hibernate Hibernate包已经添加,做数据库实体映射不显示项目名,Hibernate Reverse Engineering
- javaEE 用户、部门、角色、权限实体的关系设计与hibernate映射配置文件关系总结
- 树状结构的设计(把一棵树存入数据库的hibernate映射,及数据库表的设计)
- 使用Hibernate做一对多的实体映射(使用面向对象的方式设计表)
- hibernate @Transeit 如何在映射实体中添加非数据库字段
- hibernate学习-实体类与数据库表映射 分类: Hibernate 2012-11-01 17:21 541人阅读 评论(0) 收藏 举报 1.根据实体类名获取表名 Map<String, A
- hibernate 实体字段不映射到数据库
- Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- 一步一步学EF系列3【升级篇 实体与数据库的映射】
- SSH——hibernate 利用注解实现实体关联映射详解
- Hibernate学习笔记(2)——搭建项目框架编写hibernate配置文件、实体映射文件
- Activiti实体对象与类和数据库表的映射
- 将一个实体映射到多张数据库表
- hibernate实体指定某些字段不映射
- hibernate实体层次设计之三种类型的继承形式(二)
- hibernate映射数据库提示not maped
- hibernate映射类中通过@Transient可能标注一个属性不是数据库的字段
- Hibernate实体映射笔记