`
Wind_ZhongGang
  • 浏览: 259691 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate ORM Component

阅读更多

  Hibernate提倡在建模时,进行细粒度的控制。这个抽象的概念可以这样理解,一般在进行Hibernate持久化对象建模时,一个对象对应一个配置文件,在配置文件中的属性都有这样一个对象中的属性对应。试想如果一个对象的属性有十几二十个,那么这个对象显然就会变得很大,尤其是getter和setter方法。这样显然会增加对象的复杂度,使得对象变得难以理解。那这时该怎么办呢。Hibernate为我们提供了这样一个途径。那就是利用Component。即这么多属性中必然有些属性是在概念上相近的,如一个Person对象中有这样三个属性,firstname,middlename,lastname,这三个属性都和名字有关,所以可以提成一个Name对象作为Person的Component。这就是Hibernate提倡的细粒度控制了。这样对象就变得易于理解,更为接近现实中的情况,使项目变得易于扩展和维护。那代码上具体如何实现呢。

 

  1.FullName.java

 

package com.template.model.person;

/**
 * Created by IntelliJ IDEA.
 * User: ZhongGang
 * Date: 11-7-21
 * Time: 下午8:22
 * To change this template use File | Settings | File Templates.
 */
public class FullName {
    private String firstName;
    private String middleName;
    private String lastName;

    public FullName() {
    }
}

 

  2.Name.java

 

package com.template.model.person;

/**
 * Created by IntelliJ IDEA.
 * User:ZhongGang
 * Date: 11-7-21
 * Time: 下午8:22
 * To change this template use File | Settings | File Templates.
 */
public class Name {
    private FullName fullName;
    private String nickName;

    public Name() {
    }
}

 

 

  3.Address.java

 

package com.template.model.person;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-21
 * Time: 下午8:24
 * To change this template use File | Settings | File Templates.
 */
public class Address {
    private String street;
    private String city;
    private String country;

    public Address() {
    }
}

 

 

  4.Human.java

 

package com.template.model.person;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-21
 * Time: 下午8:21
 * To change this template use File | Settings | File Templates.
 */
public class Human extends BasicDomain {
    private Name name;
    private Address address;

    public Human() {
    }
}

 

 

  5.Human.hbm.xml

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field">

    <class name="com.template.model.person.Human" table="human">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="active" column="active" type="java.lang.Boolean"/>
        <component name="name" class="com.template.model.person.Name">
            <component name="fullName" class="com.template.model.person.FullName">
                <property name="firstName" column="firstname" type="java.lang.String"/>
                <property name="middleName" column="middlename" type="java.lang.String"/>
                <property name="lastName" column="lastname" type="java.lang.String"/>
            </component>
            <property name="nickName" column="nickname" type="java.lang.String"/>
        </component>
        <component name="address" class="com.template.model.person.Address">
            <property name="street" column="street" type="java.lang.String"/>
            <property name="country" column="country" type="java.lang.String"/>
            <property name="city" column="city" type="java.lang.String"/>
        </component>
    </class>

</hibernate-mapping>

 

  从Name和FullName可以看出,Hibernate支持多层的Component嵌套。

 

  如果想实现从Name知道是哪个Human,应该怎么办呢?看下面的代码。只须作稍许的修改。

 

  Name.java

 

package com.template.model.person;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-21
 * Time: 下午8:22
 * To change this template use File | Settings | File Templates.
 */
public class Name {
    private FullName fullName;
    private String nickName;

    private Human human;

    public Name() {
    }

    public Human getHuman() {
        return human;
    }

    public void setHuman(Human human) {
        this.human = human;
    }
}

 

 

  Human.hbm.xml

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field">

    <class name="com.template.model.person.Human" table="human">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="active" column="active" type="java.lang.Boolean"/>
        <component name="name" class="com.template.model.person.Name">
            <parent name="human"/>
            <component name="fullName" class="com.template.model.person.FullName">
                <property name="firstName" column="firstname" type="java.lang.String"/>
                <property name="middleName" column="middlename" type="java.lang.String"/>
                <property name="lastName" column="lastname" type="java.lang.String"/>
            </component>
            <property name="nickName" column="nickname" type="java.lang.String"/>
        </component>
        <component name="address" class="com.template.model.person.Address">
            <property name="street" column="street" type="java.lang.String"/>
            <property name="country" column="country" type="java.lang.String"/>
            <property name="city" column="city" type="java.lang.String"/>
        </component>
    </class>

</hibernate-mapping>
0
0
分享到:
评论
3 楼 hcchanqing 2012-11-13  
Wind_ZhongGang 写道
hcchanqing 写道
真心没看明白。。。

哪不明白?

Component这个。可以留个QQ吗?
2 楼 Wind_ZhongGang 2012-11-12  
hcchanqing 写道
真心没看明白。。。

哪不明白?
1 楼 hcchanqing 2012-11-12  
真心没看明白。。。

相关推荐

    SpringMVC+Hibernate全注解整合

    &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt; &lt;value&gt;com.org.entity&lt;/value&gt; &lt;prop key="hibernate....

    struts2.3+hibernate3.6+spring3.1整合的纯xml配置的小项目

    application.xml配置 ... &lt;bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"&gt; &lt;property name="sessionFactory" ref="sessionFactory"&gt;&lt;/property&gt; &lt;/beans&gt;

    spring3.2+strut2+hibernate4

    --此处hibernate 的映射采用的是.xml 配置则应设置为:class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”--&gt; &lt;property name="dataSource" ref="dataSource" /&gt; &lt;prop key="...

    维生药业小项目 SSH简单学习项目

    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt; &lt;ref bean="dataSource"&gt;&lt;/ref&gt; &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect....

    SpringMVC-SSH全注解

    &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt; &lt;value&gt;com.org.core.entity&lt;/value&gt; &lt;prop key="...

    客户关系管理系统框架搭建(二)

    &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt; &lt;!--表示在类路径下加载hibernate.cfg.xml --&gt; &lt;value&gt;classpath:hibernate.cfg.xml ...

    spring_MVC源码

    18. class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt; 19. &lt;property name="dataSource" ref="dataSource" /&gt; 20. &lt;property name="hibernateProperties"&gt; 21. &lt;props&gt; 22...

    jdbc基础和参考

    Hibernate:ORM的中间件,或者说是实现了ORM的一个框架,对JDBC做了轻量级的封装。 ORM:使用元数据信息来描述对象和数据库之间的关系,并且能够自动实现java中持久化对象到关系型数据库中表的映射 脏检查:自动对...

    spring-intro:Spring 框架简介,超过 10 节课程

    Spring框架介绍========================Spring 框架简介,超过 10 节课程课程大纲S01 - Spring 简介Spring 介绍和概述三层架构 - 简短... 数据访问 - 第二部分Spring ORM 支持JPA 和 Hibernate 集成交易管理实践示例

    Spring中文帮助文档

    3.12.1. @Component和更多典型化注解 3.12.2. 自动检测组件 3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一...

    Spring API

    3.12.1. @Component和更多典型化注解 3.12.2. 自动检测组件 3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一...

    dubbo、dubbox编译所需jar包

    hibernate-validator-4.2.0.Final.jar hsqldb-1.7.1.jar htmlunit-1.9.jar httpclient-4.0.1.jar httpclient-4.1.2.jar httpclient-4.2.5.jar httpclient-4.4.jar httpcore-4.0.1.jar httpcore-4.1.2.jar jackson-...

    springmybatis

    (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看...

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

Global site tag (gtag.js) - Google Analytics