`

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());
    }
}
分享到:
评论

相关推荐

    Hibernate3.1_学习源码

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

    JEECG HIBERNATE

    在给出的文件名列表中,`cmp`可能是压缩包中某个文件或目录的简写,具体含义可能与JEECG的组件(Component)有关,比如可能是某个特定模块的代码或者配置文件。 总的来说,JEECG结合Hibernate,提供了一种高效、...

    Hibernate_test

    `hb_02_component`和`hb_03_componentOid`、`hb_03_componentCollection`则涉及到了Hibernate的组件映射(Component Mapping)和复合主键(Composite Key)。组件映射允许将一个类的属性组合成另一个类的一部分,而...

    component(组件映射)

    在Java开发领域,尤其是使用Spring或Hibernate框架时,“Component(组件映射)”是一个重要的概念。Component映射是Hibernate提供的一种机制,它允许我们将多个相关的简单属性或者对象封装到一个复合对象中,以此来...

    hibernate源码下载

    `hibernate_component_mapping`文件可能讨论了Hibernate的组件映射。组件是一组相关的属性,它们可以作为一个整体被映射到数据库的一个或多个字段上。组件映射提供了一种有效的方式,将复杂对象分解为更小的部分,...

    hibernate组件映射

    在Hibernate中,组件(Component)是一种特殊的关联关系,它将一个类的实例嵌入到另一个类中,就像Java中的内部类一样。组件可以是任何复杂的对象结构,如地址、时间戳等,它们作为主对象的一部分存储在数据库中。...

    Hibernate_code

    5. **Hibernate_Component**:这部分可能包含了Hibernate组件映射的示例。组件是对象的一部分,可以被嵌入到其他对象中,类似于数据库中的复合类型。通过@Component或@Embeddable注解,可以将一个类声明为组件,并在...

    springmvc+hibernate+定时器配置实例

    在IT行业中,SpringMVC、Hibernate和定时器是三个非常重要的技术组件,它们分别负责不同的功能领域。SpringMVC是Spring框架的一个模块,用于构建Web应用程序的Model-View-Controller(MVC)架构;Hibernate是一个...

    hibernate-dtd-xsd约束文件

    `hibernate-mapping-4.0.xsd`包含关于如何定义实体、关联(Association)、组件(Component)、集合(Collection)等的规则,而`hibernate-configuration-4.0.xsd`则定义了配置Hibernate会话工厂、缓存策略、事件...

    Hibernate插件教程

    例如,教程中提到的版本为 `jbosstools-3.2.1.Final.component--hibernatetools-Update-2011-08-01_12-53-33-H1305.zip`。 - **安装步骤**:下载后的压缩文件需解压并放入 Eclipse 的 `dropins` 目录下,并且需要...

    Hibernate中文API大全

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

    SpringMVC+Spring+hibernate配置

    2. 注解驱动开发:使用@Component、@Service、@Repository和@Controller等注解标记bean。 3. 配置事务管理:使用@Transactional注解开启事务支持,配置事务管理器。 4. 整合其他框架:如整合Hibernate,需要配置...

    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-4.3.10

    Hibernate支持三种持久化模型:实体(Entity)、值对象(Value Object)和组件(Component)。实体是与数据库表对应的Java对象;值对象用于封装业务逻辑中的数据;组件则用来表示一个对象的组成部分。 5. **级联...

    Spring3整合Hibernate4测试Demo

    这个Demo可能包含了Spring和Hibernate的XML配置文件,也可能涉及到@Component、@Service、@Repository和@Controller等注解的使用。 10. **Maven或Gradle构建**:项目可能使用Maven或Gradle进行依赖管理和构建,通过...

    spring整合struts2与hibernate核心配置文件

    4. **Action类**:通常标记为`@Component`,并使用`@Autowired`注解注入所需的Service或DAO。 通过这些配置,SSH能够协同工作,Spring负责整体控制和事务管理,Struts2处理用户交互,Hibernate处理数据库操作。这种...

    springmvc + hibernate annotation 配置

    8. **配置注解驱动**:在`dispatcher-servlet.xml`中启用Spring MVC的注解驱动,配置`&lt;context:component-scan&gt;`扫描带有注解的bean,并设置`&lt;mvc:annotation-driven&gt;`以支持HTTP方法映射和数据绑定。 9. **测试与...

Global site tag (gtag.js) - Google Analytics