什么是组件属性呢,学习过java的都知道依赖吧?
就是一个类的属性是另一个类的对象
下面用一个例子讲解一下
新建地址类:
public class Address {
private String postcode;//邮编
private String photo;//电话
private String addaress;//地址
public Address(){
}
public Address(String postcode, String photo, String addaress) {
super();
this.postcode = postcode;
this.photo = photo;
this.addaress = addaress;
}
public String getPostcode() {
return postcode;
}
public void setPostcode(String postcode) {
this.postcode = postcode;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public String getAddaress() {
return addaress;
}
public void setAddaress(String addaress) {
this.addaress = addaress;
}
}
修改Student类Student类的address属性是Address类的对象
import java.sql.Blob;
import java.util.Date;
public class Student {
private int id;
private String name;
private Date birthday;
private Address address;
private Blob picture;// 照片
public Student() {
}
public Student(int id, String name, Date birthday, Address address,
Blob picture) {
super();
this.id = id;
this.name = name;
this.birthday = birthday;
this.address = address;
this.picture = picture;
}
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", birthday="
+ birthday + ", address=" + address + "]";
}
public Blob getPicture() {
return picture;
}
public void setPicture(Blob picture) {
this.picture = picture;
}
}
修改address属性的映射关系:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-11-14 10:16:59 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="Student" table="STUDENT">
<id name="id" type="int">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" />
</property>
<!--
<property name="address" type="java.lang.String">
<column name="ADDRESS" />
</property>
-->
<component name="address" class="Address">
<property name="postcode" column="POSTCODE"></property>
<property name="photo" column="PHOTO"></property>
<property name="address" column="ADDRESS"></property>
</component>
<property name="picture" type="java.sql.Blob">
<column name="PICTURE" />
</property>
</class>
</hibernate-mapping>
其中Student类的address属性对应Address类,映射关系如下,很简单吧
<component name="address" class="Address">
<property name="postcode" column="POSTCODE"></property>
<property name="photo" column="PHOTO"></property>
<property name="address" column="ADDRESS"></property>
</component>
把配置文件生成表的策略该为creare<property name="hbm2ddl.auto">create</property>
测试方法:
@Test
public void testSaveStudents(){
//Student s = new Student(1, "小明", new Date(), "北京xxxx街道5号楼201");
Student s = new Student();
s.setName("小明");
s.setBirthday(new Date());
//s.setAddress("123");
Address address = new Address("88554","125552","杭州");
s.setAddress(address);
session.save(s);//保存对象到数据库
}
运行测试成功