多對多(老師and學生)
ER
teacher:
欄位名 | 主鍵 | 型別 | 描述 |
id | pk | int | 老師編號 |
name | varchar | 老師姓名 |
student:
欄位名 | 主鍵 | 型別 | 描述 |
id | pk | int | 學生編號 |
name | varchar | 學生姓名 |
中間表:
tea_stu:
欄位名 | 主鍵 | 型別 | 描述 |
tea_id | fk | int | 關聯教師id |
stu_id | fk | int | 關聯學生id |
多對多:在操作和效能方面都不太理想,一般使用較少實際中最好轉換成一對多的物件模型,hibernate會為我們建立中間錶轉換成兩個一對多。
package domain; import java.util.HashSet; import java.util.Set; public class Student { private int id; private String name; private Set<Teacher> teachers = new HashSet<Teacher>(); 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 Set<Teacher> getTeachers() { return teachers; } public void setTeachers(Set<Teacher> teachers) { this.teachers = teachers; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="domain"> <class name="Student" table="`student`"> <id name="id" column="`id`"> <generator class="native"></generator> </id> <property name="name" column="name"/> <set name="teachers" table="tea_stu"> <key column="student_id"></key> <many-to-many class="Teacher" column="teacher_id"></many-to-many> </set> </class> </hibernate-mapping>
package domain; import java.util.HashSet; import java.util.Set; public class Teacher { private int id; private String name; private Set<Student> students = new HashSet<Student>(); 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 Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="domain"> <class name="Teacher" table="`teacher`"> <id name="id" column="`id`"> <generator class="native"></generator> </id> <property name="name" column="name"/> <set name="students" table="tea_stu"> <key column="teacher_id"></key> <many-to-many class="Student" column="student_id"></many-to-many> </set> </class> </hibernate-mapping>
<!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> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///user</property> <property name="connection.username">root</property> <property name="connection.password">mysqladmin</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="domain/Student.hbm.xml"/> <mapping resource="domain/Teacher.hbm.xml"/> </session-factory> </hibernate-configuration>
測試:
package test;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import dao.HibernateUtil;
import domain.Student;
import domain.Teacher;
public class Many2Many {
public static void main(String[] args) {
add();
query();
}
static void add(){
Session session = null;
Transaction tx = null;
try {
Set<Teacher> ts = new HashSet<Teacher>();
Teacher t1 = new Teacher();
t1.setName("tracher1");
ts.add(t1);
Teacher t2 = new Teacher();
t2.setName("tracher2");
ts.add(t2);
Set<Student> ss = new HashSet<Student>();
Student s1 = new Student();
s1.setName("student1");
ss.add(s1);
Student s2 = new Student();
s2.setName("student2");
ss.add(s2);
// t1.setStudents(ss);
// t2.setStudents(ss);
s1.getTeachers().add(t1);
s1.getTeachers().add(t2);
s2.setTeachers(ts);
session = (Session) HibernateUtil.getSession();
tx = session.beginTransaction();
session.save(t1);
session.save(t2);
session.save(s1);
session.save(s2);
tx.commit();
} catch (Exception e) {
// TODO: handle exception
}finally{
if(session != null){
session.close();
}
}
}
static void query(){
Session session = null;
Transaction tx = null;
try {
session = (Session) HibernateUtil.getSession();
tx = session.beginTransaction();
Teacher t = (Teacher)session.get(Teacher.class, 1);
System.out.println("student's size:"+t.getStudents().size());
} catch (Exception e) {
// TODO: handle exception
}finally{
if(session != null){
session.close();
}
}
}
}
相關推薦
多對多(老師and學生)
ER teacher: 欄位名 主鍵 型別 描述 id pk int 老師編號 name varchar 老師姓名 student: 欄位名 主鍵 型別 描述 id pk int 學生編號 name varchar 學生姓名 中間表: tea
mybatis 詳解(七)------一對一、一對多、多對多
不變 角色 導入 ctu transacti stat 工程 build -1 前面幾篇博客我們用mybatis能對單表進行增刪改查操作了,也能用動態SQL書寫比較復雜的sql語句。但是在實際開發中,我們做項目不可能只是單表操作,往往會涉及到多張表之間的關聯操作。那麽我
數據表對應關系(一對一、一對多、多對多)
結果 ng- 垂直切分 包含 varchar 商品 記錄 padding borde ? 前言 本文主要介紹數據表的關聯關系,這是數據庫設計的常見問題之一。一個好的表結構設計,可以減少一些不必要的表或字段等。數據表之間的關聯關系分為三種:一對一、一對多、多對多。下面就逐一
Hibernate學習筆記(五) --- 創建基於中間關聯表的多對多映射關系
mys 兩個 override pac tid 一對多 main ber different 多對多映射是在實際數據庫表關系之間比較常見的一種,仍然以電影為例,一部電影可以有多個演員,一個演員也可以參演多部電影,電影表和演員表之間就是“多對多”的關系 針對多對多的映射關系,
Java中多對多映射關系(轉)
turn this mage log 演示 定義 ava copy setname 多對對的映射,可以用學生和課程進行演示。一個學生可以選擇多個課程,一個課程又對應了多個學生 定義學生類 class Stu{ private String name; p
Django CRM查詢(一對多,多對多以及相關的反查)
mce field 需要 fff etime fcc nbsp pre 使用 Customer模型: class Customer(models.Model): name = models.CharField(max_length=32) qq =
NHibernate 基於 ClassMapping 的 ManyToMany(多對多配置)
new 實體 virt cad get lmap entity hiberna ping NHibernate 基於 ClassMapping 的 ManyToMany(多對多配置) 實體類 public class Library { public virtual
數據庫表設計(一對多,多對多)
關系 log 一個 數據庫 inf 對應關系 分享圖片 也有 通過 做一個項目,必然是少不了數據庫設計的!在學習階段,基本都是單表。然而在實際開發過程中,一對多,多對多的表處處都是!簡單整理一下,一對多,多對多表如何設計整理一下思路: 數據庫
spring data jpa關聯查詢(一對一、一對多、多對多)
sse eager save net array ota println ack generate 在實際過往的項目中,常用的查詢操作有:1、單表查詢,2、一對一查詢(主表和詳情表)3、一對多查詢(一張主表,多張子表)4、多對多查詢(如權限控制,用戶、角色多對多)。做個
Python筆記18(Django之ORM(多對多))
方式 The short erro edm 關聯對象 對象的關聯 .site views 一、ManyToManyField 1、class RelatedManager "關聯管理器"是在一對多或者多對多的關聯上下文中使用的管理器。 它存在於下面兩種情況: 外
使用GreenDao建立表、關聯表(一對一,一對多,多對多)、CURD、升級資料庫等操作
應用場景:從照片中找出包含有使用者人臉的照片,並儲存該照片中的人臉特徵、使用該特徵和使用者人臉特徵對比,滿足條件,照片就儲存到該使用者表裡 一、建立表 GreenDao託管地址:https://github.com/greenrobot
hibernate的多對多的關聯 2(增加、刪除)
重點: 1、級聯新增 inverse屬性值的設定 2、 級聯刪除 重點解析: 1.hibernate的多對多 1.1 hibernate可以直接對映多對多關聯關係(看作兩個一對多) 講解inverse; 總共四種 (false 是控制方 ,true 是被控制方),其中有兩種正確,兩種
多對多(一)
資料庫的多對多 1.1 資料庫中不能直接對映多對多 處理:建立一個橋接表(中間表),將一個多對多關係轉換成兩個一對多 注1:資料庫多表聯接查詢 永遠就是二個表的聯接查詢 A B C D t1 C t2 D
【筆記】Mybatis高階查詢(四)--使用resultMap的<collection>標籤實現一對多和多對多查詢
<collection>集合的巢狀結果對映就是指通過一次SQL查詢將所有的結果查詢出來,然後對映到不同的物件中。在一對多的關係中,主表一條資料會對應關聯表的多條資料。因此一般查詢時會查詢出多條結果,按照一對多的資料對映時,最終的結果數會小於等於查詢的總記錄數。
【Hibernate(三)】Hibernate表操作、多對多配置
1.2 Hibernate的一對多關聯對映 1.2.1 資料庫表與表之間的關係 1.2.1.1 一對多關係 什麼樣關係屬於一對多? 一個部門對應多個員工,一個員工只能屬於某一個部門。 一個客戶對應多個聯絡人,一個聯絡人只能屬於某一個客戶。 一對多的建表原
多對多(1)
資料庫的多對多 1.1 資料庫中不能直接對映多對多 處理:建立一個橋接表(中間表),將一個多對多關係轉換成兩個一對多 注1:資料庫多表聯接查詢 永遠就是二個表的聯接查詢 A B C D t1 C t2 D
Django框架(十二)—— 補充:inclusion_tag、defer、only、choice、事務、建立多對多的第三張表
補充:inclusion_tag、defer、only、choice、事務、建立多對多的第三張表 一、inclusion_tag 1、作用 用於生成HTML片段,是資料由引數傳入而變成動態 2、使用 # 1.app下新建一個模組,templatetags # 2.建立一個py檔案(mytag.py)
Hibernate關聯對映(一對多/多對多)
3. Hibernate關聯對映 上接Hibernate持久化類:https://blog.csdn.net/biggerchong/article/details/84260707 目錄 3. Hibernate關聯對映 3.1 資料庫
(十九)Mybatis自關聯多對多查詢
注:程式碼已託管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,專案是mybatis-14-oneself-many2one,需要自取,需要配置maven環境以及mysql環境(sql語句在resource下的test.s
MyBatis學習總結(九)---基於XML多表聯合查詢(一對一、一對多、多對多)
1、一對一的關聯 使用association,association元素用於處理“has-one”(一對一)這種型別關係。 作用:針對pojo物件屬性的對映,它的兩個主要引數此時對應的值: javaType對應pojo類名, property對應pojo的