????????Day(每日)和Dish(菜譜)屬于多對(duì)多關(guān)系谴咸,一天可以有多個(gè)菜譜選擇搓逾,一個(gè)菜譜可以被多天選擇卷谈。定義兩張表時(shí)確定好兩個(gè)表的聯(lián)系,會(huì)自動(dòng)生成第三張表來(lái)存放相關(guān)聯(lián)的ID霞篡。
? ? ? ? 創(chuàng)建兩張表時(shí)可設(shè)定一張表為關(guān)系維持方世蔗,使用@ManyToMany注解和@JoinTable注解。
????????dishSet用于存放這一個(gè)選擇的哪些菜譜朗兵。
????????@JsonIdentityReference(alwaysAsId = true)使dishSet中都以dish的Id存放污淋。
????????@JoinTable定義表名,以及對(duì)應(yīng)屬性joinColumns為關(guān)系維持方的屬性余掖,inverseJoinColumns為被維護(hù)方的屬性寸爆。
????????@ManyToMany中mappedBy = "dishSet"表示該表與day中的dishSet相關(guān)聯(lián),fetch設(shè)置該表為懶加載方式盐欺,需要使用到這些數(shù)據(jù)時(shí)再進(jìn)行加載赁豆。
? ? ? ? 在這之前需要?jiǎng)?chuàng)建一個(gè)Dao類來(lái)操作數(shù)據(jù)庫(kù)
????????使用@Transactional這個(gè)注解的類或者方法表示該類里面的所有方法或者這個(gè)方法的事務(wù)由spring處理冗美,來(lái)保證事務(wù)的原子性魔种,即是方法里面對(duì)數(shù)據(jù)庫(kù)操作,如果失敗則spring負(fù)責(zé)回滾操作粉洼,成功則提交操作节预。這樣刪除數(shù)據(jù)操作就算中間失敗出錯(cuò),也會(huì)恢復(fù)數(shù)據(jù)属韧。
? ? ? ? 對(duì)事務(wù)的理解:
????????事務(wù)是一個(gè)整體安拟,結(jié)果就兩種(成功或者失敗)要么全部成功(提交),要么全部失斚埂(回滾)糠赦,就算成功一部分也要(回滾)。
????????事物的四個(gè)特性
1、原子性:對(duì)數(shù)據(jù)進(jìn)行操作的時(shí)候愉棱,要么全都執(zhí)行唆铐,要么全都不執(zhí)行。
2奔滑、一致性:和原子性是分不開(kāi)的,事務(wù)執(zhí)行成功顺少,說(shuō)明全部都執(zhí)行了朋其,那么就使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀了。
3脆炎、隔離性: 一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾
????4梅猿、持續(xù)性: 事務(wù)一旦提交成功,那么數(shù)據(jù)庫(kù)里的數(shù)據(jù)就會(huì)永久性的改變秒裕。
? ??????@Modifying注解用于標(biāo)注這是一個(gè)Updata或者Delete操作
后臺(tái)接收前端傳遞回來(lái)的數(shù)據(jù)后執(zhí)行以下操作:
????????先根據(jù)day的Id將第三張表中有關(guān)這個(gè)Id的數(shù)據(jù)刪除袱蚓,再通過(guò)jdbc.batchUpdata對(duì)第三張表執(zhí)行插入數(shù)據(jù)的操作。該方法適用于數(shù)據(jù)量不多的情況几蜻。
? ? ? ? 前后端傳遞數(shù)據(jù)的類型要一致喇潘。