Hibernate Component映射的一個簡單例子

jopen 11年前發布 | 17K 次閱讀 Hibernate 持久層框架

Hibernate Component映射的一個簡單例子

建立一個相關的數據庫表:

create table c_user(
id int(11) not null auto_increment,
age int(11) default null,
firstname varchar(50) default null,
lastname varchar(50) default null,
address varchar(200) default null,
zipcode varchar(10) default null,
tel varchar(20) default null,
primary key(id)
)engine=innodb default charset=gbk;

注解:該表是一個用戶信息表,可以將用戶信息歸納為兩個部分:一個部分是name(姓名),包含firstname()lastname();另一部分是contact(聯系方式),包括了address(地址)zipcode(郵編)tel(電話)等信息。在創建實體類時,可以將namecontact分別封裝到2個獨立的類中,這樣就提高了系統的復用性和靈活性。也就是說,需要使用Component映射,將其他的實體類映射在一起。

建立一個Name.java類:

package collect.component;

import java.io.Serializable;

public class Name implements Serializable {

    private String firstname;
    private String lastname;

    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

}

建立聯系方式相關的類Contact.java:

package collect.component;

import java.io.Serializable;

public class Contact implements Serializable{

    private String address;
    private String zipcodes;
    private String tel;

    public Contact() {}

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getZipcodes() {
        return zipcodes;
    }

    public void setZipcodes(String zipcodes) {
        this.zipcodes = zipcodes;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

}

最后建立數據庫表對應的實體類Cuser.java

package collect.component;

public class Cuser {
    private Integer id;
    private Integer age;
    private Name name;
    private Contact contact;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Name getName() {
        return name;
    }

    public void setName(Name name) {
        this.name = name;
    }

    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

}

建立映射文件Cuser.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>
    <class name="collect.component.Cuser" table="c_user" catalog="ssh">
        <id name="id" type="integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="age" type="integer">
            <column name="age" />
        </property>
        <component name="name" class="collect.component.Name">
            <property name="firstname" type="string">
                <column name="firstname" length="50" />
            </property>
            <property name="lastname" type="string">
                <column name="lastname" length="50" />
            </property>
        </component>
        <component name="contact" class="collect.component.Contact">
            <property name="address" type="string">
                <column name="address" length="200" />
            </property>
            <property name="zipcodes" type="string">
                <column name="zipcode" length="10" />
            </property>
            <property name="tel" type="string">
                <column name="tel" length="20" />
            </property>
        </component>
    </class>
</hibernate-mapping>

注解:映射文件使用component元素將Name類、Contact類同數據庫表c_user聯系起來。

將該映射文件加入到Hibernate的配置文件中,建立一個測試類Test.java:

package collect.component;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Test {

    public static void main(String[] args) {
        // Configuration管理Hibernate配置
        Configuration config = new Configuration().configure();
        // 根據Configuration建立 SessionFactory
        // SessionFactory用來建立Session
        SessionFactory sessionFactory = config.buildSessionFactory();

        // 創建實例
        Name name=new Name();
        name.setFirstname("閆");
        name.setLastname("術卓");

        Contact contact = new Contact();
        contact.setAddress("北京");
        contact.setTel("42689334");
        contact.setZipcodes("100085");

        Cuser user= new Cuser();
        user.setAge(33);
        user.setName(name);
        user.setContact(contact);

        // 定義主鍵變量
        Integer pid;

        // 添加數據
        Session session = sessionFactory.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            // 創建主鍵變量
            pid = (Integer) session.save(user);
            tx.commit();
        } catch (RuntimeException e) {
            if (tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }

        // 關閉sessionFactory
        sessionFactory.close();

    }

}

 

運行結果:

控制臺:

20:47:57,366 DEBUG SQL:346 - insert intossh.c_user (age, firstname, lastname, address, zipcode, tel) values (?, ?, ?,?, ?, ?)

數據庫:

Hibernate Component映射的一個簡單例子

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!