hibernate框架学习(关联关系)

来源:互联网 发布:篆刻印章制作软件 编辑:程序博客网 时间:2024/06/05 05:29

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();
}


}

0 0
原创粉丝点击