1、 关联关系及方向关系
1Vn nV1 nVm 单向关联 双向关联
2.例子
bean:
package com;
/**
* 简单的pojo类型javabean
*
* @author xieyongxue
*
*/
public class Student {
private String stuId;
private String stuName;
private String stuGener;
private String stuAge;
// 与StudentType关系 Student与StudentType形成一对一的关系
private StudentType studenttype;
public StudentType getStudenttype() {
return studenttype;
}
public void setStudenttype(StudentType studenttype) {
this.studenttype = studenttype;
}
public Student() {
}
public Student(String stuId) {
this.stuId = stuId;
}
public Student(String stuId, String stuName, String stuGener, String stuAge) {
this.stuId = stuId;
this.stuName = stuName;
this.stuGener = stuGener;
this.stuAge = stuAge;
}
public String getStuId() {
return this.stuId;
}
public void setStuId(String stuId) {
this.stuId = stuId;
}
public String getStuName() {
return this.stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuGener() {
return this.stuGener;
}
public void setStuGener(String stuGener) {
this.stuGener = stuGener;
}
public String getStuAge() {
return this.stuAge;
}
public void setStuAge(String stuAge) {
this.stuAge = stuAge;
}
}
package com;
import java.util.Set;
public class StudentType {
private String stutypeid;
private String stutypename;
private String stutypedetail;
//与Student形成一对多的关系
private Set<Student> st;
public Set<Student> getSt() {
return st;
}
public void setSt(Set<Student> st) {
this.st = st;
}
public String getStutypeid() {
return stutypeid;
}
public void setStutypeid(String stutypeid) {
this.stutypeid = stutypeid;
}
public String getStutypename() {
return stutypename;
}
public void setStutypename(String stutypename) {
this.stutypename = stutypename;
}
public String getStutypedetail() {
return stutypedetail;
}
public void setStutypedetail(String stutypedetail) {
this.stutypedetail = stutypedetail;
}
}
配置文件:
Student.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 此头文件与hibernate-mapping-3.0.dtd相同-->
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com">
<!-- 熟悉名与表的字段名 -->
<!-- catalog="student"可以理解为数据库 -->
<class name="Student" table="student" catalog="student">
<id name="stuId" type="java.lang.String">
<column name="STU_ID" length="50" />
<!-- generator class="incremet"ID生成器 -->
<generator class="assigned" />
</id>
<property name="stuName" type="java.lang.String">
<column name="STU_NAME" length="50" />
</property>
<property name="stuGener" type="java.lang.String">
<column name="STU_GENER" length="50" />
</property>
<property name="stuAge" type="java.lang.String">
<column name="STU_AGE" length="50" />
</property>
<many-to-one name="studenttype" column="stutypeid" class="StudentType" cascade="all" fetch="join"></many-to-one>
</class>
</hibernate-mapping>
StudentType.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">
<hibernate-mapping package="com">
<!-- 熟悉名与表的字段名 -->
<!-- catalog="student"可以理解为数据库 -->
<class name="StudentType" table="studenttype" catalog="student">
<id name="stutypeid" type="java.lang.String">
<column name="stutypeid" length="50" />
<!-- generator class="incremet"ID生成器 -->
<generator class="assigned" />
</id>
<property name="stutypename" type="java.lang.String">
<column name="stutypename" length="50" />
</property>
<property name="stutypedetail" type="java.lang.String">
<column name="stutypedetail" length="50" />
</property>
<!-- private Set<Student> st; -->
<set name="st" cascade="all">
<!-- 以stutypeid关联 -->
<key column="stutypeid"></key>
<!-- private Set<Student> st;与学生类关联 -->
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!-- 该头文件和hibernate-configuration-3.0.dtd的一样 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 规定用哪一种数据库 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 数据库连接URL -->
<property name="connection.url">
jdbc:mysql://localhost:3306/student
</property>
<!-- 数据库的连接名和密码,没有密码不配置 -->
<property name="connection.username">root</property>
<!-- 数据库驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">mysql</property>
<!-- 格式化数据库语句 -->
<property name="format_sql">true</property>
<!-- 是否生成sql语句 -->
<property name="show_sql">true</property>
<!-- 映射资源 类与数据库相互映射 -->
<mapping resource="com/Student.hbm.xml" />
<mapping resource="com/StudentType.hbm.xml"/>
</session-factory>
</hibernate-configuration>
测试例子如下:
package com;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateDemo2 {
public static void main(String[] args) {
//创建hibenate配置对象
Configuration conf=new Configuration();
//加载处理配置文件的hibenate.cfg.xml
conf.configure();
//生成session工厂对象
SessionFactory sf=conf.buildSessionFactory();
//session是持久化最关键的一个类
Session s=sf.openSession();
//开启事务
Transaction tx=s.beginTransaction();
//创建一个对象
// Student student=new Student();
// student.setStuId("123455");
// student.setStuName("xieyongxue");
//执行插入
// s.save(student);
//执行查询
Query q=s.createQuery("from Student");
// ArrayList<Student> alg=(ArrayList<Student>)q.list();
// for(Student stu:alg){
// System.out.println(stu.getStudenttype().getStutypename());
// }
// Student students=(Student) s.get(Student.class,"123455");
// System.out.println(students.getStuName());
// System.out.println(students.getStudenttype().getStutypename());
StudentType stutype=(StudentType) s.get(StudentType.class, "1");
System.out.println(stutype);
Set<Student> st=stutype.getSt();
for(Student sty: st){
System.out.println(sty.getStuName());
}
// System.out.println(students.getStudenttype().getStutypename());
tx.commit();
s.close();
sf.close();
}
}