今天上课我们主要学习的是组建映射,
组件映射
关联的属性是个复杂类型的持久化类型,但不是实体即:数据库中没有表与该属性对应,但该类的属性要持久保存的。
<component name=”name” class=”com.test.hibernate.domain.Name”>
<property name=”initial”>
<property name=”first”>
<property name=”last”>
</component>
当组建的属性不能和表中的字段简单对应的时候可以选择实现:
org.hibernate.usertype.UserType或org.hibernate.usertype.CompositeUserType
组建映射实例源代码及其解析:
(1) 在domain包下新建Name类:
封装有两个属性firstName, lastName。
并生成其setter和getter方法。
public class Name {
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;
}
}
(2) 在User类中封装一个Name对象的 name属性,并生成其setter和getter方法
import java.util.Date;
public class User {
private int id;
private Name name;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date bithday) {
this.birthday = bithday;
}
}
(3) 修改映射文件User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="com.hbsi.domain">
<class name="User" table="user">
<id name="id" column="id">
<generator class="native"/>
</id>
<component name="name">
<property name="firstName" column="first_name"/>
<property name="lastName" column="last_name"/>
</component>
<property name="birthday" column="birthday"/>
</class>
</hibernate-mapping>
(4) 编写测试类:
public static void main(String[] args){
User user=new User();
Name name=new Name();
name.setFirstName("Ding");
name.setLastName("hongwei");
user.setName(name);
user.setBirthday(new Date());
addUser(user);
}