`

hibernate component

阅读更多
Component
本次做MySNS时也用到了Component,在School.java和Address.java以及school.hbm.xml
如果一张表的列太多了,那我们应该怎么做呢?可能有些人的做法就是:将一张一有拆分成两张表,那除了将表进行拆分,我们还能怎么样呢?在 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)
);


现在假如除了ID、用户名、密码、登录号之外,所有属性都作为Hibernate的一个详细信息,那我们可以这样设计我们的类:
User.java
程序代码
package zizz.model;

import java.io.Serializable;

/**
* 该对象是针对着数据库的T_USER表.
*
* <a href="http://www.suneca.com">ZIZZ</a>
*
* 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;
    }
   
}


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>


测试类:
程序代码
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("");
       
        UserDetail detail = new UserDetail();
        detail.setAddress("");
        detail.setAge(20);
        detail.setDegree("");
        detail.setMobilePhone("");
        detail.setPhone("");
        detail.setPhs("");
       
        user.setUserDetail(detail);
       
        dao.createUser(user);       
    }
   
    /**
     * 测试根据ID查找用户
     */
    public void testFind(){
        UserDAO dao  = new UserDAOHibernate();
        User user = dao.findUserById(1);
        System.out.println(user.getUserDetail());
    }
}
分享到:
评论

相关推荐

    04-hibernate-Component_and_Inheritance_Mapping

    Component and Inheritance Mapping Originals of Slides and Source Code for Examples: http://courses.coreservlets.com/Course-Materials/hibernate.html

    Hibernate3.1_学习源码

    03 03Hibernate_Component : 实体细粒度的划分,数据库中的一张表在程序中划分为几个部分的实体,配置文件和增、删、改、查的使用。 04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计...

    Hibernate中文API大全

    组件(Component)是一个被包含的对象,在持久化的过程中,它被当作值类型,而并非一个实体的引用。在这篇文档中,组件这一术语指的是面向对象的合成概念(而并不是系统构架层次上的组件的概念)。举个例子, 你对人...

    Hibernate+中文文档

    5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass) 5.1.17. 联合子类(union-subclass) 5.1.18. 连接(join) 5.1.19. 键...

    hibernate学习笔记

    组件component映射(hibernate_component) 27 复合(联合)主键映射(hibernate_composite) 27 集合(collection)映像 (hibernate_collection) 28 Hibernate 对数据库的并发支持 30 悲观锁(hibernate_pessimistic...

    Hibernate学习笔记

    022 component(组件)关联映射 023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate ...

    Hibernate Tools For Eclipse Plugins

    Hibernate Tools is a toolset for Hibernate implemented as an integrated suite of Eclipse plugins, ... Hibernate Tools is a core component of JBoss Tools and hence also part of JBoss Developer Studio.

    hibernate3.2中文文档(chm格式)

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate 教程

    开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...

    Hibernate中文详细学习文档

    5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass) 5.1.17. 联合子类(union-subclass) 5.1.18. 连接(join) 5.1.19. 键...

    Hibernate 中文 html 帮助文档

    5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass) 5.1.17. 联合子类(union-subclass) 5.1.18. 连接(join) 5.1.19. 键(key) ...

    最全Hibernate 参考文档

    1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 3.1. 可编程的配置方式 ...

    Hibernate Recipes A Problem-Solution Approach

    How to do various mappings, including one-to-one mapping, many-to-one mapping, collection mapping, component mapping, and inheritance mapping How to use Hibernate Query Language (HQL) How to perform ...

    hibernate-shards.jar

    GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 ... 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies ...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate教程

    Hibernate参考文档 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第...

    Hibernate框架参考文档

    8. 组件(Component)映射; 9. 继承映射(Inheritance Mappings); 10. 与对象共事; 11. 事务和并发; 12. 拦截器与事件(Interceptors and events); 13. 批量处理(Batch processing; 14. HQL: Hibernate查询语言; 15. ...

    hibernate注解案例

    Hibernate 的注解学习 ExportDBAnnotation HibernateAnnotationUtils 【一对一】关系映射【一对多】关系映射 【多对多】关系映射 【composite复合主键】关系映射【component组件】关系映射

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

Global site tag (gtag.js) - Google Analytics