Java的Hibernate框架中的組合映照進修教程。本站提示廣大學習愛好者:(Java的Hibernate框架中的組合映照進修教程)文章只能為提供參考,不一定能成為您想要的結果。以下是Java的Hibernate框架中的組合映照進修教程正文
1、組合映照
組合是聯系關系關系的一種特別情形,是聯系關系關系耦合度最高的一種關系,組合的主對象和子對象具有雷同的性命周期,主對像滅亡的話子對象也會滅亡。這裡應用雇主和用戶作為示例,用戶和雇主都具有接洽方法屬性,假如這裡站在對象角度思慮的話,經常會把對象模子繪制成為組合的方法,籠統出來一個配合的接洽方法類,然後兩種人分離包括響應的接洽方法對象便可,向應的對象模子時它的對象示例以下圖所示:
組合對象模子在生成響應的關系模子後會把對應的子類包括到主表中,所以對應的表構造會將響應的屬性生成到對應的表中,響應的表構造以下:
1.1 Employee類及映照文件
在對象模子中Employee和Contact之間具有包括關系,在編寫代碼時須要將Contact對象包括在Employee中。對應的映照文件中也須要有Contact對象的映照,須要應用<component>標簽來標明組合的對象,並把對象的屬性添加到對象標簽中。
清單一:Employee.java,類文件中除根本的屬性外還須要分裝Contact對象,由於它們之間有一層包括關系。
package com.src.hibernate; public class Employee { //id號 private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } //稱號 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } //接洽對象 private Contact userContact; public Contact getUserContact() { return userContact; } public void setUserContact(Contact userContact) { this.userContact = userContact; } }
清單二:Employee.hbm.xml,添加對應的映照文件,映照的組合對象要應用<component>來標明,並在該標簽中添加對應的對象屬性,詳細以下代碼:
<?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="com.src.hibernate.Employee" table="t_employee"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <component name="employeeContact"> <property name="email"/> <property name="address"/> <property name="zipCode"/> <property name="contactTel"/> </component> </class> </hibernate-mapping>
1.2 User類及設置裝備擺設文件
清單三:User.java,它的內容構造和Employee.java的雷同,其它的不再多說,看代碼:
package com.src.hibernate; public class User { //id號 private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } //姓名 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } //接洽對象 private Contact userContact; public Contact getUserContact() { return userContact; } public void setUserContact(Contact userContact) { this.userContact = userContact; } }
清單四:User.hbm.xml,它的內容構造同Employee.hbm.xml內容,重要是<component>標簽的應用,很簡略,代碼以下:
<?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="com.src.hibernate.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <component name="userContact"> <property name="email"/> <property name="address"/> <property name="zipCode"/> <property name="contactTel"/> </component> </class> </hibernate-mapping>
1.3 Contact.java類
該類文件沒有甚麼須要留意的處所,添加根本的屬性便可,也不須要為該類設置裝備擺設對應的映照,所以它的內容相當的簡略。
package com.src.hibernate; public class Contact { //email地址 private String email; public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } //住址 private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } //郵編號 private String zipCode; public String getZipCode() { return zipCode; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } //接洽德律風 private String contactTel; public String getContactTel() { return contactTel; } public void setContactTel(String contactTel) { this.contactTel = contactTel; } }
1.4 生成成果
經由下面的文件設置裝備擺設後接上去便可以生成響應的數據庫表構造了,生成的SQL語句以下:
drop table if exists t_employee drop table if exists t_user create table t_employee (id integer not null auto_increment, name varchar(255), email varchar(255), address varchar(255), zipCode varchar(255), contactTel varchar(255), primary key (id)) create table t_user (id integer not null auto_increment, name varchar(255), email varchar(255), address varchar(255), zipCode varchar(255), contactTel varchar(255), primary key (id))
生成的數據庫表構造以下:
2、數據操作
組合映照獲得的表構造是一個完全的表,所以在寫入和讀取數據時采取最原始的辦法便可以完成,這裡還應用前幾篇文章頂用到的測試辦法來寫入和讀取數據,分離是應用save和load辦法,詳細操作見下文。
2.1 拔出數據
這裡應用User作為示例,Employee的寫入操作同User。在寫入數據時須要創立兩個對象,一個是接洽對象,別的一個是用戶對象,在保留時只須要保留用戶對象便可,響應的接洽對象會連帶著保留。
public void testSave1(){ //聲明會話對象 Session session=null; try{ //獲得會話對象 session=HibernateUtils.getSession(); //開啟會話 session.beginTransaction(); //創立銜接對象 Contact userContact=new Contact(); userContact.setAddress("北京市"); userContact.setContactTel("1243435"); userContact.setEmail("[email protected]"); userContact.setZipCode("zipCode"); //創立用戶對象 User user=new User(); user.setName("zhangsan"); user.setUserContact(userContact); session.save(user); //提交會話 session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils.closeSession(session); } }
生成的SQL語句:
insert into t_user (name, email, address, zipCode, contactTel) values (?, ?, ?, ?, ?)
檢查表構造以下:
2.2讀取操作
異樣應用User作為示例,Employee的操作同User對象。讀取操作相當的簡略,代碼以下:
public void testLoad1(){ //聲明會話對象 Session session=null; try{ //獲得會話對象 session=HibernateUtils.getSession(); //開啟會話 session.beginTransaction(); //獲得user對象 User user=(User)session.load(User.class, 1); System.out.println("用戶姓名: "+user.getName()); //提交會話 session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils.closeSession(session); } }
生成對應的成果以下:
Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_, user0_.email as email0_0_, user0_.address as address0_0_, user0_.zipCode as zipCode0_0_, user0_.contactTel as contactTel0_0_ from t_user user0_ where user0_.id=? 用戶姓名: zhangsan
3、綜合實例
Account:
public class Account implements Serializable{ private int id; private double money; private Address address; public int getId() { return id; } public void setId(int id) { this.id = id; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
Address:
public class Address implements Serializable{ private String code; private String city; private String province; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } }
Account.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"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping package="pojo"> <class name="Account" table="t_account" > <id name="id"> <column name="id"></column> <generator class="native"></generator> </id> <property name="money"> <column name="money"></column> </property> <component name="address"> <property name="code"> <column name="code"></column> </property> <property name="city"> <column name="city"></column> </property> <property name="province"> <column name="province"></column> </property> </component> </class> </hibernate-mapping>