導(dǎo)讀
- 什么是組件映射
- 代碼
什么是組件映射
多個(gè)實(shí)體類有可能會(huì)有共同的一些屬性,如果把這些屬性單獨(dú)的拿出來,形成一個(gè)類,所有需要的實(shí)體類直接包含它就可以,這樣能簡(jiǎn)化代碼。
- 組件類不會(huì)形成單獨(dú)的數(shù)據(jù)表結(jié)構(gòu)
- 組件類的屬性,會(huì)在調(diào)用它的實(shí)體類表結(jié)構(gòu)中被創(chuàng)建

image.png
代碼
User.java
package entity;
public class User {
private int id;
private String name;
private String phone;
private UserExtra user_extra;
public UserExtra getUser_extra() {
return user_extra;
}
public void setUser_extra(UserExtra user_extra) {
this.user_extra = user_extra;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
UserExtra.java
package entity;
public class UserExtra {
private int sex;
private String address;
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
User.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 package="entity">
<class name="entity.User">
<id name="id">
<generator class="native"/>
</id>
<property name="name"></property>
<property name="phone"></property>
<!-- 組件是實(shí)體類的一部分,但是不會(huì)生成獨(dú)立的數(shù)據(jù)表 -->
<!-- 組件的屬性會(huì)進(jìn)入到User數(shù)據(jù)表中 -->
<component name="user_extra">
<property name="sex"></property>
<property name="address"></property>
</component>
</class>
</hibernate-mapping>
單元測(cè)試
package entity;
import org.hibernate.classic.Session;
import junit.framework.TestCase;
import util.hibernateUtil;
/**
* 目標(biāo):測(cè)試組件映射方式
* 注意:組件是一個(gè)實(shí)體類,其中包含了一些公共的屬性,在做映射關(guān)系的時(shí)候,組件是不生成表的。
* 但是數(shù)據(jù)表結(jié)構(gòu)中包含組件屬性,也就是User表中包含UserExtra類中的屬性
* @author arkulo
*
*/
public class TestDemo extends TestCase {
//數(shù)據(jù)添加
public void test1(){
Session session = null;
try
{
session = hibernateUtil.getSession();
session.beginTransaction();
User user = new User();
user.setName("樂迪");
user.setPhone("18500112233");
UserExtra extra = new UserExtra();
extra.setSex(1);
extra.setAddress("大興區(qū)棗園路");
user.setUser_extra(extra);
session.save(user);
session.getTransaction().commit();
}catch(Exception e)
{
e.printStackTrace();
session.getTransaction().rollback();
}finally
{
hibernateUtil.closeSession(session);
}
}
// 讀數(shù)據(jù),
public void test2()
{
Session session = null;
try {
session = hibernateUtil.getSession();
session.beginTransaction();
User user = (User)session.load(User.class, 1);
System.out.println("用戶名:"+user.getName());
System.out.println("地址:"+user.getUser_extra().getAddress());
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
} finally {
hibernateUtil.closeSession(session);
}
}
}