- 浏览: 516931 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
-
普通映射
如果一张表的列太多了,那我们应该怎么做呢?可能有些人的做法就是:将一张一有拆分成两张表,那除了将表进行拆分,我们还能怎么样呢?在
Hibernate对这种表的列太多,进行拆分,有一种非常好的解决方案,那就是基于Component技术,使用Component技术,我们可以将一
种表,按照字段的类型进行分类,同一类的,可以使用一个对象进行封装,而这个封装的对象,就是一个Component。假如,一个用户他的信息可能包含以
下几种分类,住址(包括家庭地址、办公地址、家庭邮编、办公邮编等)、电话(家庭电话、办公电话、手机、小灵通)、邮件地址(办公邮箱、私人邮箱等)、通
信工具(QQ号码、MSN、雅虎帐号、网易泡泡等),对于这些属性类别,我们都可以使用对象进行封装。
假如现在有以下这样的数据库表:
建表语句:
程序代码
drop table if
exists T_USER;
/*==============================================================*/
/* Table: T_USER */
/*==============================================================*/
create table T_USER
(
ID INT not null auto_increment,
USER_NAME VARCHAR( 20) not null ,
LOGINID VARCHAR( 20) not null ,
PASSWORD VARCHAR( 32) not null ,
AGE INT,
ADDRESS VARCHAR( 255) ,
MOBILE_PHONE VARCHAR( 20) ,
PHS VARCHAR( 20) ,
PHONE VARCHAR( 20) ,
DEGREE VARCHAR( 20) ,
primary key ( ID)
) ;
/*==============================================================*/
/* Table: T_USER */
/*==============================================================*/
create table T_USER
(
ID INT not null auto_increment,
USER_NAME VARCHAR( 20) not null ,
LOGINID VARCHAR( 20) not null ,
PASSWORD VARCHAR( 32) not null ,
AGE INT,
ADDRESS VARCHAR( 255) ,
MOBILE_PHONE VARCHAR( 20) ,
PHS VARCHAR( 20) ,
PHONE VARCHAR( 20) ,
DEGREE VARCHAR( 20) ,
primary key ( ID)
) ;
现在假如除了ID、用户名、密码、登录号之外,所有属性都作为Hibernate的一个详细信息,那我们可以这样设计我们的类:
User.java
程序代码
package
zizz.
model;
import java. io. Serializable;
/**
* 该对象是针对着数据库的T_USER表.
*
*
* Create-Time:Apr 21, 2008 9:53:58 PM
*/
public class User implements Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
private int id;
private String userName;
private String loginId;
private String password;
private UserDetail userDetail;
public UserDetail getUserDetail( ) {
return userDetail;
}
public void setUserDetail( UserDetail userDetail) {
this . userDetail = userDetail;
}
public int getId( ) {
return id;
}
public void setId( int id) {
this . id = id;
}
public String getUserName( ) {
return userName;
}
public void setUserName( String userName) {
this . userName = userName;
}
public String getLoginId( ) {
return loginId;
}
public void setLoginId( String loginId) {
this . loginId = loginId;
}
public String getPassword( ) {
return password;
}
public void setPassword( String password) {
this . password = password;
}
}
import java. io. Serializable;
/**
* 该对象是针对着数据库的T_USER表.
*
*
* Create-Time:Apr 21, 2008 9:53:58 PM
*/
public class User implements Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
private int id;
private String userName;
private String loginId;
private String password;
private UserDetail userDetail;
public UserDetail getUserDetail( ) {
return userDetail;
}
public void setUserDetail( UserDetail userDetail) {
this . userDetail = userDetail;
}
public int getId( ) {
return id;
}
public void setId( int id) {
this . id = id;
}
public String getUserName( ) {
return userName;
}
public void setUserName( String userName) {
this . userName = userName;
}
public String getLoginId( ) {
return loginId;
}
public void setLoginId( String loginId) {
this . loginId = loginId;
}
public String getPassword( ) {
return password;
}
public void setPassword( String password) {
this . password = password;
}
}
UserDetail.java
程序代码
package
zizz.
model;
import java. io. Serializable;
/**
* 用户详情信息.
*
* <a href="http://www.suneca.com ">ZIZZ</a>
*
* Create-Time:Apr 23, 2008 10:39:47 PM
*/
public class UserDetail implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
private int age;
private String address;
private String mobilePhone;
private String phs;
private String phone;
private String degree;
public int getAge( ) {
return age;
}
public void setAge( int age) {
this . age = age;
}
public String getAddress( ) {
return address;
}
public void setAddress( String address) {
this . address = address;
}
public String getMobilePhone( ) {
return mobilePhone;
}
public void setMobilePhone( String mobilePhone) {
this . mobilePhone = mobilePhone;
}
public String getPhs( ) {
return phs;
}
public void setPhs( String phs) {
this . phs = phs;
}
public String getPhone( ) {
return phone;
}
public void setPhone( String phone) {
this . phone = phone;
}
public String getDegree( ) {
return degree;
}
public void setDegree( String degree) {
this . degree = degree;
}
}
import java. io. Serializable;
/**
* 用户详情信息.
*
* <a href="http://www.suneca.com ">ZIZZ</a>
*
* Create-Time:Apr 23, 2008 10:39:47 PM
*/
public class UserDetail implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
private int age;
private String address;
private String mobilePhone;
private String phs;
private String phone;
private String degree;
public int getAge( ) {
return age;
}
public void setAge( int age) {
this . age = age;
}
public String getAddress( ) {
return address;
}
public void setAddress( String address) {
this . address = address;
}
public String getMobilePhone( ) {
return mobilePhone;
}
public void setMobilePhone( String mobilePhone) {
this . mobilePhone = mobilePhone;
}
public String getPhs( ) {
return phs;
}
public void setPhs( String phs) {
this . phs = phs;
}
public String getPhone( ) {
return phone;
}
public void setPhone( String phone) {
this . phone = phone;
}
public String getDegree( ) {
return degree;
}
public void setDegree( String degree) {
this . degree = degree;
}
}
User的hibernate mapping file
User.hbm.xml
程序代码
<
?
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 " >
< hibernate-mapping package= "zizz.model" >
< class name= "User" table= "T_USER" >
< id name= "id" column= "ID" >
< generator class= "increment" / >
< / id>
< property name= "userName" column= "USER_NAME" / >
< property name= "loginId" column= "LOGINID" / >
< property name= "password" column= "PASSWORD" / >
< component name= "userDetail" class= "UserDetail" lazy= "true" >
< property name= "age" column= "AGE" / >
< property name= "address" column= "ADDRESS" / >
< property name= "mobilePhone" column= "MOBILE_PHONE" / >
< property name= "phs" column= "PHS" / >
< property name= "phone" column= "PHONE" / >
< property name= "degree" column= "DEGREE" / >
< / component>
< / class>
< / hibernate-mapping>
< !DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate-mapping package= "zizz.model" >
< class name= "User" table= "T_USER" >
< id name= "id" column= "ID" >
< generator class= "increment" / >
< / id>
< property name= "userName" column= "USER_NAME" / >
< property name= "loginId" column= "LOGINID" / >
< property name= "password" column= "PASSWORD" / >
< component name= "userDetail" class= "UserDetail" lazy= "true" >
< property name= "age" column= "AGE" / >
< property name= "address" column= "ADDRESS" / >
< property name= "mobilePhone" column= "MOBILE_PHONE" / >
< property name= "phs" column= "PHS" / >
< property name= "phone" column= "PHONE" / >
< property name= "degree" column= "DEGREE" / >
< / component>
< / class>
< / hibernate-mapping>
测试类:
程序代码
package
zizz.
test;
import zizz. dao. UserDAO;
import zizz. dao. hibernate. UserDAOHibernate;
import zizz. model. User;
import zizz. model. UserDetail;
/**
* 测试Hibernate Component.
* <a href="http://www.suneca.com ">ZIZZ</a>
*
* Create-Time:Apr 23, 2008 11:33:30 PM
*/
public class ComponentTest {
public static void main( String[ ] args) {
ComponentTest test = new ComponentTest( ) ;
test. testFind( ) ;
}
/**
* 测试创建一个新帐号
*/
public void testCreateUser( ) {
UserDAO dao = new UserDAOHibernate( ) ;
User user = new User( ) ;
user. setLoginId( "cyz" ) ;
user. setPassword( "admin" ) ;
user. setUserName( "广州IT培训" ) ;
UserDetail detail = new UserDetail( ) ;
detail. setAddress( "华南师范大学计算机学院" ) ;
detail. setAge( 20) ;
detail. setDegree( "工学硕士" ) ;
detail. setMobilePhone( "13888888888" ) ;
detail. setPhone( "020-85210088" ) ;
detail. setPhs( "020-85210088" ) ;
user. setUserDetail( detail) ;
dao. createUser( user) ;
}
/**
* 测试根据ID查找用户
*/
public void testFind( ) {
UserDAO dao = new UserDAOHibernate( ) ;
User user = dao. findUserById( 1) ;
System. out. println( user. getUserDetail( ) ) ;
}
}
import zizz. dao. UserDAO;
import zizz. dao. hibernate. UserDAOHibernate;
import zizz. model. User;
import zizz. model. UserDetail;
/**
* 测试Hibernate Component.
* <a href="http://www.suneca.com ">ZIZZ</a>
*
* Create-Time:Apr 23, 2008 11:33:30 PM
*/
public class ComponentTest {
public static void main( String[ ] args) {
ComponentTest test = new ComponentTest( ) ;
test. testFind( ) ;
}
/**
* 测试创建一个新帐号
*/
public void testCreateUser( ) {
UserDAO dao = new UserDAOHibernate( ) ;
User user = new User( ) ;
user. setLoginId( "cyz" ) ;
user. setPassword( "admin" ) ;
user. setUserName( "广州IT培训" ) ;
UserDetail detail = new UserDetail( ) ;
detail. setAddress( "华南师范大学计算机学院" ) ;
detail. setAge( 20) ;
detail. setDegree( "工学硕士" ) ;
detail. setMobilePhone( "13888888888" ) ;
detail. setPhone( "020-85210088" ) ;
detail. setPhs( "020-85210088" ) ;
user. setUserDetail( detail) ;
dao. createUser( user) ;
}
/**
* 测试根据ID查找用户
*/
public void testFind( ) {
UserDAO dao = new UserDAOHibernate( ) ;
User user = dao. findUserById( 1) ;
System. out. println( user. getUserDetail( ) ) ;
}
}
- 复合组成关系
computer ----------> CP UBox -------------->GraphicsCard
-------------->Vendor
CP UBox,GraphicsCard是组成关系,没有hbm.xml
Verndor 是关联关系 有 Vendor.hbm.xml 对应
Computer.hbm.xml
<hibernate-mapping> <class name="mypack.Computer" table="COMPUTERS"> <id name="id" type="long" colum="ID"> <generatro class="increment"/> </id> <property name="type" type="string"> <column name="COMPUTER_TYPE" /> </property> <component name="cpuBox" class="mypack.CpuBox"> <parent name="computer"/> <property name="type" type="string"> <column name="CPUBOX_TYPE" /> </property> <component name="graphicsCard" class="mypack.GraphicsCard"> <parent name="cpuBox"/> <property name="type" type="string"> <column name="GRAPHICSCARD_TYPE" /> </property> </component> <many-to-one name="vendor" column="CPUBOX_VENDOR_ID" class="mypack.Vendor" not-null="true" </component> </class> </hibernate-mapping>
发表评论
文章已被作者锁定,不允许评论。
-
Hibernate 配置 说明
2011-11-29 09:05 1476Hibernate配置说明 <?xm ... -
hibernate 相关问题 (一)
2011-04-06 13:50 1461一、Hibernate缓存深入详解 看附件 ... -
Hibenrate 中 inverse="true"
2010-09-19 10:12 1053转:http://www.iteye.com/to ... -
hibernate 3.0 中 批量更新,批量删除
2010-09-09 12:51 978hibernate 2.1没有对批量更新和批量删除提供很好的支 ... -
hibernate one-to-one
2010-09-07 15:56 1420一。 1. 完全的一对一关系,即A与B两种实体,分两个表格, ... -
hibernate many-to-many
2010-09-07 15:26 876Inverse是hibernate双向关系 ... -
hibernate 集合排序 二 (数据库排序)
2010-09-03 11:03 1139<set><idbag>< ... -
hibernate 集合排序 一 (内存排序)
2010-09-03 10:52 1081内存中排序 <set><map ... -
hibernate map映射
2010-09-03 10:46 1016Person.java package com.aa ... -
hibernate list映射
2010-09-03 10:41 1114Answer类为Question类一对多关联关系,即一个问题对 ... -
hibernate idbag映射
2010-09-03 10:35 1044假设Team和Student是1对多的关系,而studen ... -
hibernate set映射
2010-09-03 10:27 1790Hibernate之容器映射 Set映射 两张表对应一个 ... -
hibernate 二级缓存(三)
2010-08-31 11:00 1363过这篇文章纪录hibernate二级缓存的一些使用经历,利用几 ... -
hibernate 二级缓存(二)
2010-08-31 10:48 11361 启用 Hibernate 二级缓存 Hibe ... -
hibernate 二级缓存(一)
2010-08-31 10:29 1830一。 1 . Hibernate ... -
hibernate 事务 并发
2010-08-27 10:17 1383数据库事务与并发 ... -
hibernate 执行 本地 sql
2010-08-25 10:47 17421.为了把sql查询返回的关系数据映射为对象,需 ... -
Hibernate3的配置参数汇总
2010-08-25 10:22 7511、Hibernate JDBC属性 属 ... -
正确理解 hibernate 的 inverse many-to-many
2010-08-25 10:18 815Inverse是hibernate双向关系 ... -
Hql 语法
2010-08-19 14:40 914HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。 ...
相关推荐
在" Hibernate教程09_关系映射之组件映射 "的配套源码`s2sh_relation06_component`中,你可能会看到如何实际应用这些概念的例子。源码可能包含了`Employee`、`Address`以及其他相关类,以及对应的配置文件,如`...
【标题】"Hibernate映射文件结构"涉及到的是Java持久化框架Hibernate的核心概念,它用于将对象与数据库表之间的关系进行定义。映射文件是Hibernate工作的重要组成部分,它们以XML格式编写,通常命名为`.hbm.xml`,并...
为了将这些映射转换为实际的数据库表结构,我们可以使用`SchemaExport`工具,它会根据Hibernate映射文件生成SQL语句来创建和更新数据库。示例中展示了创建`employers`、`employment_periods`和`employees`表的SQL...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了Java应用与数据库之间的交互。在Hibernate中,组件映射是将一个类的实例作为另一个类的一个属性进行持久...
3. **Component的声明**:说明如何在Hibernate的配置文件或注解中声明一个Component,包括它的类定义、属性和关联关系。 4. **Component的嵌入方式**:介绍如何在其他实体类中嵌入Component,包括使用`@Component`...
* Hibernate映射关系 部分内容的知识点: * 组件关联映射的实现方式 * Hibernate组件映射的配置文件(People.hbm.xml) * 组件类的定义和使用(MyName.java) * 实体类的定义和使用(People.java) * Hibernate的Session...
《Hibernate各类映射文件与配置文件模板》是一个包含多种Hibernate映射和配置示例的压缩包,用于帮助开发者理解和使用Hibernate框架。Hibernate是Java领域的一个流行的对象关系映射(ORM)框架,它允许开发者用面向...
在Java持久化领域,Hibernate是一个不可或缺的框架,它提供了强大的对象关系映射(ORM)能力。本文将深入探讨Hibernate中的组件映射,包括使用注解(Annotation)和XML配置两种方式,以帮助开发者更好地理解和应用这...
### Hibernate映射文件基础结构 映射文件通常以`<!DOCTYPE hibernate-mapping>`开头,引用DTD(文档类型定义),确保文件遵循正确的格式。例如: ```xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/...
**HIBERNATE映射** 对于一对一的映射,可以使用`<one-to-one>`标签来实现: ```xml <hibernate-mapping> </hibernate-mapping> ``` 这里`constrained="true"`意味着如果删除`Foo`对象,则关联的`Bar`...
Hibernate是Java领域中一款广泛应用的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互,使得开发者可以使用面向对象的方式来操作数据库。在"Hibernate_test"这个主题中,我们将深入探讨Hibernate的...
【Hibernate继承映射】是Java开发中...以上就是关于Hibernate继承映射、一对一关系、组件映射以及HQL的基础知识,这些概念和实践技巧在Java企业级开发中非常常见,熟练掌握能有效提高数据操作的效率和代码的可维护性。
在本文中,我们将深入探讨Hibernate配置文件中的映射元素,这些元素是将对象关系映射到数据库的关键部分。首先,我们需要了解映射文件的基本结构,它通常是一个XML文档,遵循特定的DTD(文档类型定义)。 `...
对于那些刚开始学习Hibernate或者想要深入理解ORM(对象关系映射)机制的人来说,这是一个非常宝贵的资源。 **知识点详解:** 1. **Hibernate框架**:Hibernate是一个开源的Java持久化框架,它提供了一种在Java...
`hibernate_component_mapping`文件可能讨论了Hibernate的组件映射。组件是一组相关的属性,它们可以作为一个整体被映射到数据库的一个或多个字段上。组件映射提供了一种有效的方式,将复杂对象分解为更小的部分,...
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...
03 03Hibernate_Component : 实体细粒度的划分,数据库中的一张表在程序中划分为几个部分的实体,配置文件和增、删、改、查的使用。 04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计...