导读
- 什么是组件映射
- 代码
什么是组件映射
多个实体类有可能会有共同的一些属性,如果把这些属性单独的拿出来,形成一个类,所有需要的实体类直接包含它就可以,这样能简化代码。
- 组件类不会形成单独的数据表结构
- 组件类的属性,会在调用它的实体类表结构中被创建
代码
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>
<!-- 组件是实体类的一部分,但是不会生成独立的数据表 -->
<!-- 组件的属性会进入到User数据表中 -->
<component name="user_extra">
<property name="sex"></property>
<property name="address"></property>
</component>
</class>
</hibernate-mapping>
单元测试
package entity;
import org.hibernate.classic.Session;
import junit.framework.TestCase;
import util.hibernateUtil;
/**
* 目标:测试组件映射方式
* 注意:组件是一个实体类,其中包含了一些公共的属性,在做映射关系的时候,组件是不生成表的。
* 但是数据表结构中包含组件属性,也就是User表中包含UserExtra类中的属性
* @author arkulo
*
*/
public class TestDemo extends TestCase {
//数据添加
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("大兴区枣园路");
user.setUser_extra(extra);
session.save(user);
session.getTransaction().commit();
}catch(Exception e)
{
e.printStackTrace();
session.getTransaction().rollback();
}finally
{
hibernateUtil.closeSession(session);
}
}
// 读数据,
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);
}
}
}