- 浏览: 174066 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
-
gwill_21:
dwr.xml找不到怎么办,难道要自己手写dwr.xml?痛苦 ...
DWR框架 —— 用户注册验证 -
recoba7:
MLDN魔乐科技 Oracle学习笔记 (5) -
lanni2460:
呵呵 尽管现在才看到这个 但是我真的觉得 李老师 讲的很好呢 ...
严重声明,那些恶意诋毁MLDN及李兴华老师的其他培训机构统统走开 -
chian_xxp:
只要把功能实现了,代码结构合理了,代码性能提高了,该注意的注意 ...
业务、业务、业务。。。 -
wzpbb:
密码多少啊??? 给一下啊
MLDN 魔乐科技 Oracle 学习笔记(2)
假设有一个商品管理项目。
商品只有以下两类:1、书。 2、DVD
有以下共通的属性:编号,标题,价格
书包含自己单独的属性:页数
DVD包含自己单独的属性:时间长度
类的设计为:
三个类:商品类、子类书类、子类DVD类
一、两张表
2张表:书表和DVD表,通过单独操作书与DVD来完成管理操作。
该设计与父类和子类无关,只是通过操作单独的子类来完成功能。
二、三张表
商品表:编号,标题,价格
书表:商品编号,页数
DVD表:商品编号,时间长度
1、建立数据库
DROP TABLE item ;
DROP TABLE book ;
DROP TABLE dvd ;
CREATE TABLE item (
id int primary key auto_increment ,
title varchar(20) not null,
price double not null
);
CREATE TABLE book (
id int primary key ,
page int not null
);
CREATE TABLE dvd (
id int primary key ,
time_length double not null
);
2、生成映射
只需要生成item表的映射,另外两个类手工编写,并且编写过程中不需要加入book和dvd的映射关系文件。
package org.liky.pojo;
public class Item implements java.io.Serializable {
// Fields
private Integer id;
private String title;
private Double price;
// Constructors
public Item() {
}
public Item(String title, Double price) {
this.title = title;
this.price = price;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public Double getPrice() {
return this.price;
}
public void setPrice(Double price) {
this.price = price;
}
}
建立Book类
package org.liky.pojo;
public class Book extends Item {
private int page;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
}
建立DVD类
package org.liky.pojo;
public class Dvd extends Item {
private double timeLength;
public double getTimeLength() {
return timeLength;
}
public void setTimeLength(double timeLength) {
this.timeLength = timeLength;
}
3、修改映射文件
修改映射文件,加入子类配置
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.Item" table="item" catalog="testdb">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="title" length="20" not-null="true" />
</property>
<property name="price" type="java.lang.Double">
<column name="price" precision="22" scale="0"
not-null="true" />
</property>
<!-- 表示Item类包含一个子类为Book,Book类与book表有对应关系 -->
<joined-subclass name="org.liky.pojo.Book" table="book">
<!-- 表示在book表中是通过id字段与item表建立关联关系的 -->
<key column="id"></key>
<!-- 表示Book类中的page属性与book表中的page字段有对应关系 -->
<property name="page" type="java.lang.Integer">
<column name="page" not-null="true"></column>
</property>
</joined-subclass>
<joined-subclass name="org.liky.pojo.Dvd" table="dvd">
<key column="id"></key>
<property name="timeLength" type="java.lang.Double">
<column name="time_length" not-null="true"></column>
</property>
</joined-subclass>
</class>
</hibernate-mapping>
4、编写后台代码
只建立Item类的DAO接口等操作
5、测试
// 插入书
// Book book = new Book();
// book.setTitle("哈里波特");
// book.setPrice(32.5);
// book.setPage(500);
//
// try {
// itemdao.doCreate(book);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 插入DVD
Dvd dvd = new Dvd();
dvd.setTitle("终结者");
dvd.setPrice(5.0);
dvd.setTimeLength(2.0);
try {
itemdao.doCreate(dvd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
List all = itemdao.findAll(1, 10);
Iterator iter = all.iterator();
while (iter.hasNext()) {
Item item = (Item) iter.next();
if (item instanceof Book) {
Book book = (Book)item;
System.out.println(book.getTitle() + " --> " +book.getPage());
} else if (item instanceof Dvd) {
Dvd dvd = (Dvd) item;
System.out.println(dvd.getTitle() + " --> " +dvd.getTimeLength());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
查询性能非常低,因此绝对不使用。
三、一张表
1张表:只有一个Item表
Item表:编号、标题、价格、页数、时间长度、标志位
1、建立表
DROP TABLE item ;
DROP TABLE book ;
DROP TABLE dvd ;
CREATE TABLE item (
id int primary key auto_increment ,
title varchar(20) not null,
price double not null,
page int ,
time_length double ,
flag varchar(20) not null
);
标志位使用varchar类型,会由Hibernate自动进行处理
2、生成映射类
3、修改映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.Item" table="item" catalog="testdb">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<!-- 定义标志位的值,标志位对应的字段为flag,其类型按照String类型处理 -->
<discriminator column="flag"></discriminator>
<property name="title" type="java.lang.String">
<column name="title" length="20" not-null="true" />
</property>
<property name="price" type="java.lang.Double">
<column name="price" precision="22" scale="0"
not-null="true" />
</property>
<!-- 表示Item类包含一个子类Book,如果操作Book时,标志位的值为book -->
<subclass name="org.liky.pojo.Book" discriminator-value="book">
<property name="page" type="java.lang.Integer">
<column name="page"></column>
</property>
</subclass>
<!-- 表示Item类包含一个子类Dvd,如果操作Dvd时,标志位的值为dvd -->
<subclass name="org.liky.pojo.Dvd" discriminator-value="dvd">
<property name="timeLength" type="java.lang.Double">
<column name="time_length"></column>
</property>
</subclass>
</class>
</hibernate-mapping>
4、测试
其他的任何后台代码都不需要修改,Hibernate会自行处理。
// 插入书
// Book book = new Book();
// book.setTitle("哈里波特");
// book.setPrice(32.5);
// book.setPage(500);
//
// try {
// itemdao.doCreate(book);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 插入DVD
// Dvd dvd = new Dvd();
// dvd.setTitle("终结者");
// dvd.setPrice(5.0);
// dvd.setTimeLength(2.0);
//
// try {
// itemdao.doCreate(dvd);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
List all = itemdao.findAll(1, 10);
Iterator iter = all.iterator();
while (iter.hasNext()) {
Item item = (Item) iter.next();
if (item instanceof Book) {
Book book = (Book) item;
System.out.println(book.getTitle() + " --> "
+ book.getPage());
} else if (item instanceof Dvd) {
Dvd dvd = (Dvd) item;
System.out.println(dvd.getTitle() + " --> "
+ dvd.getTimeLength());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
要使用的话必然使用单表的这种方式。
商品只有以下两类:1、书。 2、DVD
有以下共通的属性:编号,标题,价格
书包含自己单独的属性:页数
DVD包含自己单独的属性:时间长度
类的设计为:
三个类:商品类、子类书类、子类DVD类
一、两张表
2张表:书表和DVD表,通过单独操作书与DVD来完成管理操作。
该设计与父类和子类无关,只是通过操作单独的子类来完成功能。
二、三张表
商品表:编号,标题,价格
书表:商品编号,页数
DVD表:商品编号,时间长度
1、建立数据库
DROP TABLE item ;
DROP TABLE book ;
DROP TABLE dvd ;
CREATE TABLE item (
id int primary key auto_increment ,
title varchar(20) not null,
price double not null
);
CREATE TABLE book (
id int primary key ,
page int not null
);
CREATE TABLE dvd (
id int primary key ,
time_length double not null
);
2、生成映射
只需要生成item表的映射,另外两个类手工编写,并且编写过程中不需要加入book和dvd的映射关系文件。
package org.liky.pojo;
public class Item implements java.io.Serializable {
// Fields
private Integer id;
private String title;
private Double price;
// Constructors
public Item() {
}
public Item(String title, Double price) {
this.title = title;
this.price = price;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public Double getPrice() {
return this.price;
}
public void setPrice(Double price) {
this.price = price;
}
}
建立Book类
package org.liky.pojo;
public class Book extends Item {
private int page;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
}
建立DVD类
package org.liky.pojo;
public class Dvd extends Item {
private double timeLength;
public double getTimeLength() {
return timeLength;
}
public void setTimeLength(double timeLength) {
this.timeLength = timeLength;
}
3、修改映射文件
修改映射文件,加入子类配置
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.Item" table="item" catalog="testdb">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="title" length="20" not-null="true" />
</property>
<property name="price" type="java.lang.Double">
<column name="price" precision="22" scale="0"
not-null="true" />
</property>
<!-- 表示Item类包含一个子类为Book,Book类与book表有对应关系 -->
<joined-subclass name="org.liky.pojo.Book" table="book">
<!-- 表示在book表中是通过id字段与item表建立关联关系的 -->
<key column="id"></key>
<!-- 表示Book类中的page属性与book表中的page字段有对应关系 -->
<property name="page" type="java.lang.Integer">
<column name="page" not-null="true"></column>
</property>
</joined-subclass>
<joined-subclass name="org.liky.pojo.Dvd" table="dvd">
<key column="id"></key>
<property name="timeLength" type="java.lang.Double">
<column name="time_length" not-null="true"></column>
</property>
</joined-subclass>
</class>
</hibernate-mapping>
4、编写后台代码
只建立Item类的DAO接口等操作
5、测试
// 插入书
// Book book = new Book();
// book.setTitle("哈里波特");
// book.setPrice(32.5);
// book.setPage(500);
//
// try {
// itemdao.doCreate(book);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 插入DVD
Dvd dvd = new Dvd();
dvd.setTitle("终结者");
dvd.setPrice(5.0);
dvd.setTimeLength(2.0);
try {
itemdao.doCreate(dvd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
List all = itemdao.findAll(1, 10);
Iterator iter = all.iterator();
while (iter.hasNext()) {
Item item = (Item) iter.next();
if (item instanceof Book) {
Book book = (Book)item;
System.out.println(book.getTitle() + " --> " +book.getPage());
} else if (item instanceof Dvd) {
Dvd dvd = (Dvd) item;
System.out.println(dvd.getTitle() + " --> " +dvd.getTimeLength());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
查询性能非常低,因此绝对不使用。
三、一张表
1张表:只有一个Item表
Item表:编号、标题、价格、页数、时间长度、标志位
1、建立表
DROP TABLE item ;
DROP TABLE book ;
DROP TABLE dvd ;
CREATE TABLE item (
id int primary key auto_increment ,
title varchar(20) not null,
price double not null,
page int ,
time_length double ,
flag varchar(20) not null
);
标志位使用varchar类型,会由Hibernate自动进行处理
2、生成映射类
3、修改映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.Item" table="item" catalog="testdb">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<!-- 定义标志位的值,标志位对应的字段为flag,其类型按照String类型处理 -->
<discriminator column="flag"></discriminator>
<property name="title" type="java.lang.String">
<column name="title" length="20" not-null="true" />
</property>
<property name="price" type="java.lang.Double">
<column name="price" precision="22" scale="0"
not-null="true" />
</property>
<!-- 表示Item类包含一个子类Book,如果操作Book时,标志位的值为book -->
<subclass name="org.liky.pojo.Book" discriminator-value="book">
<property name="page" type="java.lang.Integer">
<column name="page"></column>
</property>
</subclass>
<!-- 表示Item类包含一个子类Dvd,如果操作Dvd时,标志位的值为dvd -->
<subclass name="org.liky.pojo.Dvd" discriminator-value="dvd">
<property name="timeLength" type="java.lang.Double">
<column name="time_length"></column>
</property>
</subclass>
</class>
</hibernate-mapping>
4、测试
其他的任何后台代码都不需要修改,Hibernate会自行处理。
// 插入书
// Book book = new Book();
// book.setTitle("哈里波特");
// book.setPrice(32.5);
// book.setPage(500);
//
// try {
// itemdao.doCreate(book);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 插入DVD
// Dvd dvd = new Dvd();
// dvd.setTitle("终结者");
// dvd.setPrice(5.0);
// dvd.setTimeLength(2.0);
//
// try {
// itemdao.doCreate(dvd);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
List all = itemdao.findAll(1, 10);
Iterator iter = all.iterator();
while (iter.hasNext()) {
Item item = (Item) iter.next();
if (item instanceof Book) {
Book book = (Book) item;
System.out.println(book.getTitle() + " --> "
+ book.getPage());
} else if (item instanceof Dvd) {
Dvd dvd = (Dvd) item;
System.out.println(dvd.getTitle() + " --> "
+ dvd.getTimeLength());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
要使用的话必然使用单表的这种方式。
发表评论
-
本小姐回来啦 —— 超级感谢MLDN
2009-08-10 13:24 1612我又回来了!哈哈,报告一个好消息,我已经成功入职博彦科 ... -
现在开始积极的找工作
2009-07-05 19:13 1188学习差不多了,得赶在毕业前找到一个工作啊,本小姐这段时 ... -
素质教育 —— 模拟面试
2009-06-30 19:10 1067今天一天都安排了职业素质的培养,包括简历的指导、技术面 ... -
EJB实体Bean开发的复合主键映射
2009-06-29 21:36 1697复合主键的映射:在Hibernate中是通过一个主键类来完成复 ... -
EJB实体Bean开发
2009-06-29 21:33 996EJB实体Bean开发的数据库连接采用数据源连接池的方式,因此 ... -
EJB3.0
2009-06-28 14:14 1244EJB是SUN公司提出的开发 ... -
JBoss服务器配置
2009-06-25 21:21 2085哦,哦,哦,EJB的准备课程啊。 这里开发使用的是 JB ... -
Spring结合iBATIS进行开发
2009-06-25 21:19 978使用Spring管理iBATIS完全可以参照Spring+Hi ... -
ibatis开发框架
2009-06-25 21:17 1277iBATIS为一个ORMapping框架,可以帮助开发人员完成 ... -
WebService分布式开发
2009-06-24 22:23 1916WebService:用来跨语言传递数据。 数据交互是通过XM ... -
北京下雨了
2009-06-18 19:56 779上次在公交车上,听到电视里放《北京下雨了》,那么北京今天 ... -
JQuery
2009-06-10 21:03 12761、JQuery的基本语法 ... -
AJAX中使用JSON
2009-06-10 21:02 1308在Java开发中,如果要使用JSON进行开发,需要一些支持,这 ... -
AJAX框架 —— JSON基本知识
2009-06-10 21:01 957我真想知道这年头到底有多少种框架。 1、JSON ... -
还应该多帮助同学,才能让自己进步快
2009-06-08 21:57 1012今天对于本小姐来讲还真是相对轻松的一天啊,上周完成了任 ... -
业务、业务、业务。。。
2009-06-03 18:41 1156项目就是业务,项目中都是业务,技术就这么点东西,只要把 ... -
IBM Project 继续中ing....
2009-06-02 19:08 884项目就是要坚持的做下去,而且要想到做到最好,虽然框架很好 ... -
实际开发了
2009-06-01 18:17 898今天开始新的项目了,项目老师帮我们搭建好了SVN服务器, ... -
web学习笔记 —— 数据源
2009-05-31 19:56 1039使用数据源可以提升数据库的操作性能,当然,不管使用与否,对于程 ... -
SSH(Spring + Struts + Hibernate)
2009-05-31 19:47 2500Spring结合Hibernate ...
相关推荐
本文将围绕“Hibernate实体层设计”,介绍如何在MyEclipse环境中进行实体类的设计与配置,帮助读者快速上手并理解Hibernate的核心概念。 #### 二、实体设计基础 在开始之前,我们先明确几个基本概念: - **实体...
本篇文章将深入探讨Hibernate中的实体层次设计,这是一个关键概念,它涉及到如何在数据库中表示类的继承结构。通过理解这些设计模式,开发者能够更好地管理和优化数据存储。 首先,我们来看“tablePerConcreteClass...
**第五部分:Hibernate实体层设计** 这部分将探讨如何优化实体层的设计,以提高应用的性能和可维护性。这包括懒加载(Lazy Loading)策略,通过延迟加载提高性能;级联操作(Cascade)可以将父对象的操作同步到子...
### Hibernate实体层设计 在Hibernate中,实体层是业务逻辑与数据库之间的桥梁。它由Java类和这些类的实例组成,这些类代表数据库中的表。实体类通常具有与数据库表对应的字段,并通过注解或XML配置文件与数据库表...
"19-Hibernate实体层设计笔记.pdf"和"23-26Hibernate数据关联技术笔记.pdf"至"32Hibernate数据关联技术_1vs1应用案例_笔记.pdf"涵盖了Hibernate的基本概念,包括实体类的设计、持久化、会话管理以及一对一、一对多和...
- 在生成实体类之前,建议先对数据库表进行一定的规范化处理,如合理设计字段、添加注释等,这样生成的实体类会更加规范易读。 - 生成的实体类默认可能包含所有字段的getter和setter方法,对于不需要持久化的字段...
### Hibernate实体关联关系映射详解 #### 一、引言 Hibernate作为一种强大的对象关系映射(Object Relational Mapping,简称ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了持久化层的开发工作,...
在`13-Hibernate入门(上)笔记.pdf`至`19-Hibernate实体层设计笔记.pdf`中,详细介绍了Hibernate的配置、实体类的创建、映射文件的编写、HQL(Hibernate Query Language)的使用,以及如何处理复合主键等复杂情况。...
19-Hibernate实体层设计笔记.pdf 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记.pdf 20-22Hibernate_容器映射技术笔记.pdf 23-26Hibernate数据关联技术笔记.pdf 27-32Hibernate数据关联技术_1vs1应用案例_笔记.pdf 3...
"19.Hibernate实体层设计"可能探讨了如何规划和设计实体类的层次结构,以适应业务需求和数据库模式。这通常包括实体间的继承、多态和复合等设计原则。 "25_26Hibernate数据关联(11、M1、1N、MN)(3)(4)"这部分...
每个模块都对应一个或多个Action,这些Action与Hibernate实体类进行交互,完成数据库操作。为了保证系统稳定性和安全性,还需要考虑异常处理、事务管理、权限控制等方面的设计。 **开发实践** 1. **环境搭建**:...
【Hibernate程序设计】系列主要涵盖了Hibernate的各个方面,包括概述、对象-关系映射基础、复杂实体映射、关联映射以及查询技术。以下是对这些知识点的详细解释: 1. **Hibernate概述** - Hibernate是一个开源的...
"Hibernate封装DAO层"就是将Hibernate的功能整合到DAO设计模式中,以实现更加高效、规范的数据库操作。 1. **DAO设计模式**: DAO模式是软件设计模式的一种,它的核心思想是创建一个独立于具体数据库操作的对象,...
在使用Hibernate开发留言板系统时,我们需要考虑多个方面,包括系统功能设计、用户权限管理、数据库设计以及Hibernate框架的使用策略。以下是对这些方面的详细说明: ### 1. 系统功能设计 #### 1.1 创建用户 创建...
实体层设计:一个父类,两个子类,子类继承父类, 配置文件:只配置父类的映射文件,在其中加入joined-subclass将两个子类实体映射关系添加 2) 数据库表:一张表,包括公共字段、特有字段、区分字段 实体层设计...
在基于持久层框架的DAO(Data Access Object)模式应用中,Hibernate扮演着核心角色,使得业务逻辑和数据访问逻辑分离,提高了代码的可复用性和可维护性。 1. **DAO模式的理解** DAO模式是一种设计模式,它创建了...