hibernate_08_关联映射_一对多
hibernate的映射关系
一对多、多对一、一对一、多对多。
常用的是一对多和多对一。
在数据库中可以通过添加主外键的关联,表现一对多的关系;在hibernate中通过在一方持有多方的集合实现,即在“一”的一端中使用<set>元素表示持有“多”的一端对象。
下面实现一个增删改查的“一对多”demo:一个班级对应多个学生。
首先创建学生类Student
package com.imooc.entity;
import java.io.Serializable;
public class Student implements Serializable {
private int sid;
private String sname;
private String sex;
// 在多方定义一个一方的引用
private Grade grade;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
public Student() {
super();
}
public Student(String sname, String sex) {
super();
this.sname = sname;
this.sex = sex;
}
}
创建班级类Grade
package com.imooc.entity; import java.io.Serializable;
import java.util.HashSet;
import java.util.Set; public class Grade implements Serializable { private int gid;
private String gname;
private String gdesc;
private Set<Student> students = new HashSet<Student>(); public int getGid() {
return gid;
}
public void setGid(int gid) {
this.gid = gid;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public String getGdesc() {
return gdesc;
}
public void setGdesc(String gdesc) {
this.gdesc = gdesc;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
} public Grade() {
super();
} public Grade(int gid, String gname, String gdesc) {
super();
this.gid = gid;
this.gname = gname;
this.gdesc = gdesc;
} public Grade(String gname, String gdesc) {
super();
this.gname = gname;
this.gdesc = gdesc;
}
}
创建Student类的映射文件Student.hbm.xml
<?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 2017-6-1 14:49:09 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.imooc.entity.Student" table="STUDENT">
<id name="sid" type="int">
<column name="SID" />
<generator class="increment" />
</id>
<property name="sname" type="java.lang.String">
<column name="SNAME" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" />
</property>
</class>
</hibernate-mapping>
创建Grade类的映射文件Grade.hbm.xml
<?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 2017-6-1 14:49:09 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.imooc.entity.Grade" table="GRADE">
<id name="gid" type="int">
<column name="GID" />
<generator class="increment" />
</id>
<property name="gname" type="java.lang.String">
<column name="GNAME" length="20" not-null="true" />
</property>
<property name="gdesc" type="java.lang.String">
<column name="GDESC" />
</property>
<!-- 指定关联的外键列 -->
<set name="students" table="STUDENT">
<key>
<column name="GID" />
</key>
<one-to-many class="com.imooc.entity.Student" />
</set>
</class>
</hibernate-mapping>
创建hibernate的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">
<![CDATA[
jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8
]]>
</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property> <!-- 指定映射文件的路径 -->
<mapping resource="com/imooc/entity/Grade.hbm.xml" />
<mapping resource="com/imooc/entity/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
写一个增删改查的测试文件
package com.imooc.test; import java.util.Set; import org.hibernate.Session;
import org.hibernate.Transaction; import com.imooc.entity.Grade;
import com.imooc.entity.Student;
import com.imooc.util.HibernateUtil; /*
* 单向一对多关系关系(班级--->学生)
* 建立关联关系后,可以方便的从一个对象导航到另一个对象
* 注意关联的方向
*/
public class Test01 { public static void main(String[] args) {
//add();
//findStudentsByGrade();
//update();
delete();
} //将学生添加到班级
public static void add() {
Grade g = new Grade("Java一班", "Java软件开发一班");
Student s1 = new Student("杨康", "男");
Student s2 = new Student("穆念慈", "女"); //如果希望在学生表中添加对应的班级编号,需要在班级中添加学生,建立关联关系
g.getStudents().add(s1);
g.getStudents().add(s2); Session session = HibernateUtil.getSession();
Transaction tr = session.beginTransaction();
session.save(g);
session.save(s1);
session.save(s2);
tr.commit();
HibernateUtil.closeSession(session);
} //查询班级中包含的学生
public static void findStudentsByGrade() {
Session session = HibernateUtil.getSession();
Grade grade = (Grade) session.get(Grade.class, 1);
System.out.println( grade.getGname() + "," + grade.getGdesc() ); Set<Student> students = grade.getStudents();
for(Student s : students) {
System.out.println( s.getSname() + "," + s.getSex() );
}
} //修改学生信息
public static void update() {
Grade g=new Grade("Java二班", "Java软件开发二班");
Session session = HibernateUtil.getSession();
Transaction tr = session.beginTransaction();
Student s = (Student) session.get(Student.class, 1);
g.getStudents().add(s);
session.save(g);
tr.commit();
HibernateUtil.closeSession(session);
} //删除学生信息
public static void delete() {
Session session = HibernateUtil.getSession();
Transaction tr = session.beginTransaction();
Student s = (Student) session.get(Student.class, 2);
session.delete(s);
tr.commit();
HibernateUtil.closeSession(session);
}
}
hibernate_08_关联映射_一对多的更多相关文章
- 009一对一 主键关联映射_单向(one-to-one)
009一对一 主键关联映射_单向(one-to-one) ² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 主键关联:即让两个 ...
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
- 【Hibernate框架】关联映射(一对多,多对一)
根据我们的总结计划,上篇文章我们总结了有关于一对一映射相关知识,接下来,我们进行下一个阶段,一对多.多对一映射相关知识. 场景设定: 国家规定,一个人只能在一个公司上班,一个公司可以拥有很多员工.我们 ...
- Hibernate框架--关联映射,一对多,多对多 inverse cascade
回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...
- Hibernate关联映射(一对多/多对多)
版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/843401053. Hibernate关联映射上接Hibernate持久化类:h ...
- 012一对一 唯一外键关联映射_双向(one-to-one)
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...
- 011一对一 唯一外键关联映射_单向(one-to-one)
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...
- 010一对一 主键关联映射_双向(one-to-one)
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...
- mybatis_10关联查询_一对多
在使用mybatis框架的时候,很多时候需要一个查询结果里的属性包含多个对象,即一条查询结果有属性是集合,这个时候就需要使用collection标签 模型里面有集合 案例: 第一步:在Orders中添 ...
随机推荐
- Django REST framework - 视图
目录 Django REST framework 视图GenericAPIView GenericAPIView 例子 属性 混入 具体视图类 自定义基类 Django REST framework ...
- 初识 Dubbo
Dubbo 官网架构图 0:服务容器负责启动,加载运行服务提供者 1:服务提供者在启动时,向注册中心注册自己提供的服务 2:服务消费者在启动时,想注册中心订阅自己所需的服务 3:注册中心返回服务提供者 ...
- CF410div2 B. Mike and strings
/* CF410div2 B. Mike and strings http://codeforces.com/contest/798/problem/B 字符串 暴力 题意:给你n个串,每次操作可以将 ...
- UVa - 12664 - Interesting Calculator
先上题目: 12664 Interesting CalculatorThere is an interesting calculator. It has 3 rows of button.• Row ...
- Spring MVC-集成(Integration)-生成Excel示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_excel.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示 ...
- HDU 5226
公式啊,公式啊....TAT 杭电题解.....高中生...... 对于卢卡斯定理,由于p较大,所以不可能按一般的来算,n,m较小,循处理出n!的逆元对p的,然后可以按照卢卡斯定理,降低,对后面的就可 ...
- pthread_rwlock pthread读写锁
原文: http://www.cnblogs.com/diegodu/p/3890450.html 使用读写锁 配置读写锁的属性之后,即可初始化读写锁.以下函数用于初始化或销毁读写锁.锁定或解除锁定读 ...
- js 推断字符串是否包括某字符串
var Cts = "bblText"; if(Cts.indexOf("Text") > 0 ) { alert('Cts中包括Text字符串'); } ...
- swift 雨燕 新手教程
Apple Swift编程语言新手教程 chox 2014-06-03 文件夹 简单介绍 入门 简单值 控制流 函数与闭包 对象与类 枚举与结构 1 简单介绍 今天凌晨Apple刚刚公布了Swif ...
- axis实现webservices分布式通信
分布式通信原理 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2ZsMjAxMjEzMTQ=/font/5a6L5L2T/fontsize/400/fil ...