將實體對象中的邏輯組成稱為component。在配置文件中,使用component節點對組件進行聲明。
例如,一個用戶有兩個部分組成,姓名和聯系方式。姓名和聯系方式都可以作為用戶的組成部分。
1.表結構如下
use?sample;
DROP?TABLE?t_user;
CREATE?TABLE?t_user?(
???????id?INT?NOT?NULL?AUTO_INCREMENT
?????,?age?INT
?????,?firstname?VARCHAR(50)
?????,?lastname?VARCHAR(50)
?????,?address?VARCHAR(200)
?????,?zipcode?VARCHAR(10)
?????,?tel?VARCHAR(20)
?????,?PRIMARY?KEY?(id)
);
2.配置文件
TUser.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>
<!--?
????????Auto-generated?mapping?file?from
????????the?hibernate.org?cfg2hbm?engine
-->
????<class?name="cn.blogjava.component.TUser"?table="t_user"?catalog="sample">
????????<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="cn.blogjava.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="cn.blogjava.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>
將TUser.hbm.xml配置文件加入到hibernate.cfg.xml中去
3.POJO類
Contact.java
package?cn.blogjava.component;
import?java.io.Serializable;
public?class?Contact?implements?Serializable?{
????
????private?String?address;
????private?String?zipcodes;
????private?String?tel;
????
????public?String?getAddress()?{
????????return?address;
????}
????public?void?setAddress(String?address)?{
????????this.address?=?address;
????}
????public?String?getTel()?{
????????return?tel;
????}
????public?void?setTel(String?tel)?{
????????this.tel?=?tel;
????}
????public?String?getZipcodes()?{
????????return?zipcodes;
????}
????public?void?setZipcodes(String?zipcodes)?{
????????this.zipcodes?=?zipcodes;
????}
????
????
}
Name.java
package?cn.blogjava.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;
????}
????
????
}
TUser.java
package?cn.blogjava.component;
public?class?TUser??implements?java.io.Serializable?{
????private?Integer?id;
????private?Integer?age;
????private?Name?name;
????private?Contact?contact;
????
????public?Integer?getAge()?{
????????return?age;
????}
????public?void?setAge(Integer?age)?{
????????this.age?=?age;
????}
????public?Contact?getContact()?{
????????return?contact;
????}
????public?void?setContact(Contact?contact)?{
????????this.contact?=?contact;
????}
????public?Integer?getId()?{
????????return?id;
????}
????public?void?setId(Integer?id)?{
????????this.id?=?id;
????}
????public?Name?getName()?{
????????return?name;
????}
????public?void?setName(Name?name)?{
????????this.name?=?name;
????}
?????
}
4.測試類
package?cn.blogjava.component;
import?java.util.List;
import?org.hibernate.HibernateException;
import?org.hibernate.Query;
import?org.hibernate.Session;
import?org.hibernate.SessionFactory;
import?org.hibernate.Transaction;
import?org.hibernate.cfg.Configuration;
import?junit.framework.TestCase;
import?junit.framework.Assert;
public?class?HibernateTest?extends?TestCase?{
????
????Session?session?=?null;
????
????protected?void?setUp(){
????????try?{
????????????Configuration?config?=?new?Configuration().configure();
????????????SessionFactory?sessionFactory?=?config.buildSessionFactory();
????????????session?=?sessionFactory.openSession();
//????????????delete();
????????}?catch?(HibernateException?e)?{
????????????//?TODO:?handle?exception
????????????e.printStackTrace();
????????}
????}
????
????protected?void?tearDown()?{
????????try?{
????????????session.close();
????????}?catch?(HibernateException?e)?{
????????????//?TODO:?handle?exception
????????????e.printStackTrace();????????????
????????}
????}
????
????public?void?delete(){
????????Transaction?tran?=?null;
????????String?hql?=?"?delete?TUser";
????????try?{
????????????tran?=?session.beginTransaction();
????????????Query?query?=?session.createQuery(hql);
????????????int?ret?=?query.executeUpdate();
????????????System.out.println("Delete?records?=>?"?+?ret);
????????????tran.commit();
????????}?catch?(HibernateException?e)?{
????????????//?TODO:?handle?exception
????????????e.printStackTrace();
????????????Assert.fail(e.getMessage());
????????????if(tran?!=?null)?{
????????????????try?{
????????????????????tran.rollback();
????????????????}?catch(HibernateException?e2)?{
????????????????????e2.printStackTrace();
????????????????}
????????????}
????????}
????}
????
????public?void?testInsert(){
????????Transaction?tran?=?null;
????????try?{
????????????System.out.println("session?is?"?+?session);
????????????tran?=?session.beginTransaction();
????????????
????????????//user1
????????????TUser?user?=?new?TUser();
????????????user.setAge(25);
????????????Name?name?=?new?Name();
????????????name.setFirstname("yu");
????????????name.setLastname("yy");
????????????user.setName(name);
????????????Contact?contact?=?new?Contact();
????????????contact.setAddress("dalian");
????????????contact.setTel("42689334");
????????????contact.setZipcodes("116023");
????????????user.setContact(contact);
????????????
????????????session.save(user);
????????????
????????????//user2
????????????TUser?user2?=?new?TUser();
????????????user2.setAge(26);
????????????Name?name2?=?new?Name();
????????????name2.setFirstname("bai");
????????????name2.setLastname("yf");
????????????user2.setName(name2);
????????????Contact?contact2?=?new?Contact();
????????????contact2.setAddress("beijing");
????????????contact2.setTel("12345678");
????????????contact2.setZipcodes("100010");
????????????user2.setContact(contact2);????????????
????????????
????????????session.save(user2);
????????????
????????????session.flush();
????????????tran.commit();
????????????Assert.assertEquals(user.getId().intValue()?>?0,?true);
????????}?catch?(Exception?e)?{
????????????//?TODO:?handle?exception
????????????e.printStackTrace();
????????????Assert.fail(e.getMessage());
????????????if(tran?!=?null)?{
????????????????try?{
????????????????????tran.rollback();
????????????????}?catch(HibernateException?e2)?{
????????????????????e2.printStackTrace();
????????????????}
????????????}
????????}
????}
????
????public?void?testSelect(){
????????String?hql?=?"?from?TUser?where?age=25?";
????????try?{
????????????List?userList?=?session.createQuery(hql).list();
????????????TUser?user?=?(TUser)userList.get(0);
????????????Contact?contact?=?user.getContact();
????????????Assert.assertEquals(contact.getAddress(),?"dalian");
????????????Assert.assertEquals(user.getName().getFirstname(),?"yu");
????????}?catch?(HibernateException?e)?{
????????????//?TODO:?handle?exception
????????????e.printStackTrace();
????????????Assert.fail(e.getMessage());
????????}
????}
}
posted on 2006-07-05 14:55
knowhow 閱讀(286)
評論(0) 編輯 收藏 所屬分類:
ORM:Hibernate及其他