这里以大学里的学生表和系表为例介绍,学生和系之间是多对一的关系。我们称学生是多方或外键方,称系为一方或主键方。
=================sql脚本=========================
CREATE TABLE department
(
deptId SMALLINT PRIMARY KEY,
departName VARCHAR(20) NOT NULL,
address VARCHAR(20)
)
;
CREATE TABLE student
(
stuId INT PRIMARY KEY AUTO_INCREMENT,
stuName VARCHAR(20) NOT NULL,
gender VARCHAR(2),
age SMALLINT,
address VARCHAR(200) DEFAULT '学生宿舍',
deptIdd SMALLINT,
FOREIGN KEY(deptIdd) REFERENCES department(deptId)
)AUTO_INCREMENT=100
;
INSERT INTO department VALUES (10,'计算机系','计算机楼302');
INSERT INTO department VALUES (11,'艺术系','艺术楼211');
INSERT INTO department VALUES (12,'经管系','商学院911');
INSERT INTO department VALUES (13,'工程系','工程楼301');
INSERT INTO department VALUES (14,'土木系','建筑楼355');
--
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('王燕','女',18,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张栋','男',21,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('李波','男',21,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('陈建','男',19,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('王江洪','男',25,DEFAULT,12);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('潘将','男',24,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张斌','男',22,DEFAULT,14);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张斌','女',20,DEFAULT,10);
--
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘大海','男',28,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘德华','男',31,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('周润发','男',41,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张学友','男',37,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('周星驰','男',42,DEFAULT,12);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘亦菲','女',24,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('胡歌','男',32,DEFAULT,14);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('范冰冰','女',20,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('杨幂','女',26,DEFAULT,14);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘涛','女',27,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('周迅','女',21,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('古力娜扎','女',19,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('黑山老妖','妖',99,DEFAULT,12);
=========================实体类StudentEntity.java==========================
package com.obtk.entitys;
public class StudentEntity implements java.io.Serializable {
private static final long serialVersionUID = -2673758962758719899L;
private Integer stuId;
private String stuName;
private String gender;
private Integer age;
private String address;
private DeptEntity dept; //是一个关联属性,表示多个学生对应一个系
public StudentEntity() {
}
public StudentEntity( String stuName, String gender,
Integer age, String address) {
this.stuName = stuName;
this.gender = gender;
this.age = age;
this.address = address;
}
public Integer getStuId() {
return this.stuId;
}
public void setStuId(Integer stuId) {
this.stuId = stuId;
}
public String getStuName() {
return this.stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
public void setDept(DeptEntity dept) {
this.dept = dept;
}
public DeptEntity getDept() {
return dept;
}
}
=====================实体类DeptEntity================================
package com.obtk.entitys;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Department entity. @author MyEclipse Persistence Tools
*/
public class DeptEntity implements java.io.Serializable {
private static final long serialVersionUID = -8998119551638998375L;
private Integer deptId;
private String departName;
private String address;
public DeptEntity() {
}
public DeptEntity(Integer deptId, String departName, String address) {
this.deptId = deptId;
this.departName = departName;
this.address = address;
}
public Integer getDeptId() {
return this.deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public String getDepartName() {
return this.departName;
}
public void setDepartName(String departName) {
this.departName = departName;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
}
=================映射文件Student.hbm.xml============================
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.obtk.entitys">
<class name="StudentEntity" table="student">
<id name="stuId" type="java.lang.Integer">
<column name="stuId" />
<generator class="native"></generator>
</id>
<property name="stuName" type="java.lang.String">
<column name="stuName" length="20" />
</property>
<property name="gender" type="java.lang.String">
<column name="gender" length="2" />
</property>
<property name="age" type="integer">
<column name="age" />
</property>
<property name="address" type="java.lang.String">
<column name="address" length="200" />
</property>
<!-- 注意,column配置是外键 -->
<many-to-one name="dept" class="DeptEntity"
column="deptIdd"></many-to-one>
</class>
</hibernate-mapping>
接下来是相关案例
案例一. 数据添加
package com.obtk.test;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.obtk.entitys.DeptEntity;
import com.obtk.entitys.StudentEntity;
import com.obtk.utils.HiberUtil;
public class AddTest1 {
public static void main(String[] args) {
Session session=null;
Transaction tx=null;
try {
session=HiberUtil.getSession();
tx=session.beginTransaction();
DeptEntity dept=new DeptEntity(15, "金融系", "金融楼320");
session.save(dept); //由瞬时态转换为持久态
StudentEntity stu1=new StudentEntity("aa", "男", 21, "obtk学生宿舍");
StudentEntity stu2=new StudentEntity("cc", "女", 20, "obtk学生宿舍");
stu1.setDept(dept);
stu2.setDept(dept);
session.save(stu1);
session.save(stu2);
tx.commit();
} catch (HibernateException e) {
tx.rollback();
e.printStackTrace();
}finally{
HiberUtil.closeSession();
}
}
}
案例二. 查询
package com.obtk.test;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import com.obtk.entitys.StudentEntity;
import com.obtk.utils.HiberUtil;
public class JoinTest1 {
public static void main(String[] args) {
Session session=null;
try {
session=HiberUtil.getSession();
StudentEntity stu=(StudentEntity)session.load(StudentEntity.class, 113);
System.out.println(stu.getStuName()+"\t"+stu.getGender()
+"\t"+stu.getDept().getDepartName());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
HiberUtil.closeSession();
}
}
}