Hibernate_day03(轉載傳智播客的老師講義,博主只圖檢視方便)
Hibernate_day03
上節內容
1 實體類編寫規則
2 hibernate主鍵生成策略
3 實體類操作 (1)crud操作 (2)實體類物件狀態
4 hibernate的一級快取
5 hibernate的事務操作 (1)事務程式碼規則寫法
6 hibernate其他的api(查詢) |
今天內容
0 列表功能實現
1 表與表之間關係回顧 (1)一對多(客戶和聯絡人) (2)多對多(使用者和角色)
2 hibernate (1)一對多對映配置 (2)一對多級聯儲存 (3)一對多級聯刪除 (4)inverse屬性
3 hibernate多對多操作 (1)多對多對映配置 (2)多對多級聯儲存(重點) (3)多對多級聯刪除 (4)維護第三張表 |
客戶列表功能
1 sessionFactory已經關閉了,不需要關閉
2 dao裡面程式碼 //使用hibernate實現查詢列表 public List<Customer> findAll() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try {
sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction();
//查詢所有記錄 Criteria criteria = session.createCriteria(Customer.class); List<Customer> list = criteria.list();
//提交事務 tx.commit(); return list; }catch(Exception e) { tx.rollback(); }finally { session.close(); //sessionFactory不需要關閉 // sessionFactory.close(); } return null; } |
表與表之間關係回顧(重點)
1 一對多 (1)分類和商品關係,一個分類裡面有多個商品,一個商品只能屬於一個分類
(2)客戶和聯絡人是一對多關係 - 客戶:與公司有業務往來,百度、新浪、360 - 聯絡人:公司裡面的員工,百度裡面有很多員工,聯絡員工 ** 公司和公司員工的關係
- 客戶是一,聯絡人是多 - 一個客戶裡面有多個聯絡人,一個聯絡人只能屬於一個客戶
(3)一對多建表:通過外來鍵建立關係
2 多對多 (1)訂單和商品關係,一個訂單裡面有多個商品,一個商品屬於多個訂單
(2)使用者和角色多對多關係 - 使用者: 小王、小馬、小宋 - 角色:總經理、祕書、司機、保安 ** 比如小王 可以 是總經理,可以是司機 ** 比如小宋 可以是司機,可以是祕書,可以保安 ** 比如小馬 可以是 祕書,可以是總經理
(3)多對多建表:建立第三張表維護關係
3 一對一 (1)在中國,一個男人只能有一個妻子,一個女人只能有一個丈夫 |
Hibernate的一對多操作(重點)
一對多對映配置(重點)
以客戶和聯絡人為例:客戶是一,聯絡人是多
第一步 建立兩個實體類,客戶和聯絡人
第二步 讓兩個實體類之間互相表示 (1)在客戶實體類裡面表示多個聯絡人 - 一個客戶裡面有多個聯絡人
(2)在聯絡人實體類裡面表示所屬客戶 - 一個聯絡人只能屬於一個客戶
第三步 配置對映關係 (1)一般一個實體類對應一個對映檔案 (2)把對映最基本配置完成
(3)在對映檔案中,配置一對多關係 - 在客戶對映檔案中,表示所有聯絡人
- 在聯絡人對映檔案中,表示所屬客戶
第四步 建立核心配置檔案,把對映檔案引入到核心配置檔案中
測試: |
一對多級聯操作
級聯操作 1 級聯儲存 (1)新增一個客戶,為這個客戶新增多個聯絡人
2 級聯刪除 (1)刪除某一個客戶,這個客戶裡面的所有的聯絡人也刪除 |
一對多級聯儲存
1 新增客戶,為這個客戶新增一個聯絡人 (1)複雜寫法: //演示一對多級聯儲存 @Test public void testAddDemo1() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction();
// 新增一個客戶,為這個客戶新增一個聯絡人 //1 建立客戶和聯絡人物件 Customer customer = new Customer(); customer.setCustName("傳智播客"); customer.setCustLevel("vip"); customer.setCustSource("網路"); customer.setCustPhone("110"); customer.setCustMobile("999");
LinkMan linkman = new LinkMan(); linkman.setLkm_name("lucy"); linkman.setLkm_gender("男"); linkman.setLkm_phone("911");
//2 在客戶表示所有聯絡人,在聯絡人表示客戶 // 建立客戶物件和聯絡人物件關係 //2.1 把聯絡人物件 放到客戶物件的set集合裡面 customer.getSetLinkMan().add(linkman); //2.2 把客戶物件放到聯絡人裡面 linkman.setCustomer(customer);
//3 儲存到資料庫 session.save(customer); session.save(linkman);
//提交事務 tx.commit();
}catch(Exception e) { tx.rollback(); }finally { session.close(); //sessionFactory不需要關閉 sessionFactory.close(); } }
(2)簡化寫法 - 一般根據客戶新增聯絡人 第一步 在客戶對映檔案中進行配置 - 在客戶對映檔案裡面set標籤進行配置
第二步 建立客戶和聯絡人物件,只需要把聯絡人放到客戶裡面就可以了,最終只需要儲存客戶就可以了 //演示一對多級聯儲存 @Test public void testAddDemo2() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction(); // 新增一個客戶,為這個客戶新增一個聯絡人 //1 建立客戶和聯絡人物件 Customer customer = new Customer(); customer.setCustName("百度"); customer.setCustLevel("普通客戶"); customer.setCustSource("網路"); customer.setCustPhone("110"); customer.setCustMobile("999");
LinkMan linkman = new LinkMan(); linkman.setLkm_name("小巨集"); linkman.setLkm_gender("男"); linkman.setLkm_phone("911"); //2 把聯絡人放到客戶裡面 customer.getSetLinkMan().add(linkman); //3 儲存客戶 session.save(customer);
//提交事務 tx.commit(); }catch(Exception e) { tx.rollback(); }finally { session.close(); //sessionFactory不需要關閉 sessionFactory.close(); } } |
一對多級聯刪除
1 刪除某個客戶,把客戶裡面所有的聯絡人刪除
2 具體實現 第一步 在客戶對映檔案set標籤,進行配置 (1)使用屬性cascade屬性值 delete 第二步 在程式碼中直接刪除客戶 (1)根據id查詢物件,呼叫session裡面delete方法刪除
3 執行過程: (1)根據id查詢客戶 (2)根據外來鍵id值查詢聯絡人 (3)把聯絡人外來鍵設定為null (4)刪除聯絡人和客戶 |
一對多修改操作(inverse屬性)
1 讓lucy聯絡人所屬客戶不是傳智播客,而是百度
2 inverse屬性 (1)因為hibernate雙向維護外來鍵,在客戶和聯絡人裡面都需要維護外來鍵,修改客戶時候修改一次外來鍵,修改聯絡人時候也修改一次外來鍵,造成效率問題 (2)解決方式:讓其中的一方不維護外來鍵 - 一對多裡面,讓其中一方放棄外來鍵維護 - 一個國家有總統,國家有很多人,總統不能認識國家所有人,國家所有人可以認識總統
(3)具體實現: 在放棄關係維護對映檔案中,進行配置,在set標籤上使用inverse屬性 |
Hibernate多對多操作
多對多對映配置
以使用者和角色為例演示
第一步 建立實體類,使用者和角色
第二步 讓兩個實體類之間互相表示 (1)一個使用者裡面表示所有角色,使用set集合 (2)一個角色有多個使用者,使用set集合
第三步 配置對映關係 (1)基本配置 (2)配置多對多關係 - 在使用者裡面表示所有角色,使用set標籤
- 在角色裡面表示所有使用者,使用set標籤
第四步 在核心配置檔案中引入對映檔案
測試: |
多對多級聯儲存
根據使用者儲存角色
第一步 在使用者配置檔案中set標籤進行配置,cascade值save-update
第二步 寫程式碼實現 (1)建立使用者和角色物件,把角色放到使用者裡面,最終儲存使用者就可以了 //演示多對多修級聯儲存 @Test public void testSave() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction();
//新增兩個使用者,為每個使用者新增兩個角色 //1 建立物件 User user1 = new User(); user1.setUser_name("lucy"); user1.setUser_password("123");
User user2 = new User(); user2.setUser_name("mary"); user2.setUser_password("456");
Role r1 = new Role(); r1.setRole_name("總經理"); r1.setRole_memo("總經理");
Role r2 = new Role(); r2.setRole_name("祕書"); r2.setRole_memo("祕書");
Role r3 = new Role(); r3.setRole_name("保安"); r3.setRole_memo("保安");
//2 建立關係,把角色放到使用者裡面 // user1 -- r1/r2 user1.getSetRole().add(r1); user1.getSetRole().add(r2);
// user2 -- r2/r3 user2.getSetRole().add(r2); user2.getSetRole().add(r3);
//3 儲存使用者 session.save(user1); session.save(user2);
//提交事務 tx.commit();
}catch(Exception e) {
相關推薦Hibernate_day03(轉載傳智播客的老師講義,博主只圖檢視方便)Hibernate_day03 上節內容 1 實體類編寫規則 2 hibernate主鍵生成策略 3 實體類操作 (1)crud操作 (2)實體類物件狀態 4 hibernate的一級快取 5 hibernat Hibernate_day04(轉載傳智播客的老師講義,博主只圖檢視方便)Hibernate_day04 上節內容 1 表與表之間關係回顧 (1)一對多(客戶和聯絡人) (2)多對多(使用者和角色) 2 hibernate一對多操作 (1)一對多對映配置 (2)一對多級聯儲存 (3)一對多級聯刪除 (4)inverse屬性 Hibernate_day02(轉載傳智播客的老師講義,博主只圖檢視方便)Hibernate_day02 上節內容 1 web內容回顧 2 hibernate概述 (1)orm思想 3 hibernate入門案例 4 hibernate的配置檔案 5 hibernate的核心api Hibernate_day1(轉載傳智播客的老師講義,博主只圖檢視方便)Hibernate_day01 Hibernate課程安排 第一天 hibernate入門和基本操作 第二天 hibernate概念和api使用 第三天 hibernate配置一對多和多對多 第四天 hibernate查詢操 spring (轉載老師講義,博主只圖檢視方便)SpringFramework 一、介紹 Spring 是最受歡迎的企業級 Java 應用程式開發框架,數以百萬的來自世界各地的開發人員使用 Spring 框架來建立效能好、易於測試、可重用的程式碼。Spring 框架是一個開源的 Java 平臺,它最初是由 Rod Johnson 編寫的, mybatis 入門(轉載老師講義,博主只圖檢視方便)Mybatis 引言 一、介紹 MyBatis 的前身是 iBATIS , 是 Clinton Begin 在 2001 年發起的一個開源專案,最初側重於密碼軟體的開發 , 後來發展成為一款基於 Java 的持久層框架。 2 004 年, C linton maven入門(轉載老師講義,博主只圖檢視方便)一、Maven介紹 Maven專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具。 Maven 除了以程式構建能力為特色之外,還提供高階專案管理工具。由於 Maven 的預設構建規則有較高的可重用性,所以常常用兩三行 Maven 構建指令碼就可以構建 關於多線程編寫的小技巧--觀傳智播客張孝祥老師視頻有感not 線程 zed 技巧 寫到 保持 但是 判斷 notify 在此,真的很感謝傳智播客張孝祥老師,雖然已離去,但是還是要感謝。多線程這一塊幫助了很多。(觀看的是公開課視頻) 一般我先可以寫單線程版程序的,但一定要考慮清楚,將會發生競態條件的資源寫到同一個類裏面。 然後考 廣州傳智播客iOS基礎班C語言考試題目(自我感覺挺簡單的,很多老師講的都沒考到,錯了一道選擇題,加油,OC!)廣州傳智播客iOS基礎班C語言考試題目 考試時間:180分鐘 滿分:100分 及格分數:80分 一、選擇題(共10題,每題5分) 1. 若有陣列 int arr[2][3]; 則對a陣列元素的正確訪問是(C ) A. arr(1,2) B. ar 傳智播客黑馬程式設計師畢老師Java視訊學習資料,風趣幽默內容包含java學習25天的視訊資料 https://pan.baidu.com/s/1S8pLkcOShW8V5FipUGKG_w 密碼:9csv 我用的是迅雷影音,其他的播放器可能會只有聲音沒有影象 成都傳智播客Java/PHP培訓就業率高lan 培訓課程 ref -s size unit str 學生 http 依據傳智播客的數據統計,傳智播客的學員有五分之中的一個的能在畢業前找到愜意的工作,一半的學員能在畢業後一個月之內找到愜意的工作,一般在畢業後兩個月之內絕大多數同學都能找到愜意的工作。而且傳智播客 【藏龍臥虎】成都傳智播客Java就業班火爆開班!技術 找工作 java培訓 borde targe 學習 rgb idt pro 今天早晨成都被一篇烏雲籠罩,沒想到卻是一個陽光普照的日子。今天傳智播客成都java培訓中心舉行了Java就業班開班典禮,看似普通的一個班級卻個個非比平常,學員們不僅Professiona 07_傳智播客iOS視頻教程_#import指令一次 img png logs -1 預編譯 port alt 技術分享 預處理指令的執行時機是在編譯之前。在編譯之前執行預處理指令。 #import指令是包含文件,將指定的文件的內容在預編譯的時候拷貝到寫指令的地方。 #import指令無論把一個文件import了多少次, C# 面向對象初級 (參考傳智播客視頻)靜態成員 作用 才會 根據 垃圾回收器 pub 只讀 rop void 我們把這些具有相同屬性和相同方法的對象進行進一步的封裝,抽象出來 類這個概念。類就是個模子,確定了對象應該具有的屬性和方法。對象是根據類創建出來的。類就是一個蓋大樓的圖紙 對象 就是蓋出來的大樓。 傳智播客c/c++公開課學習筆記--郵箱賬戶的破解與郵箱安全防控用戶登陸 const mod ase content Coding 一行 學習筆記 ++ 一、SMTP協議 SMTP(SimpleMail Transfer Protocol)即簡單郵件傳輸協議。SMTP協議屬於TCP/IP協議簇,通過SMTP協議 傳智播客 安卓 視頻 教程ast 程序員 sha 自定義控件 path target 平板電腦 更多 list 韓夢飛沙 韓亞飛 [email protected] yue31313 han_meng_fei_sha 傳智播客 Android視頻教程_傳智播客和黑馬程序員An 2016最新整理傳智播客第15期C,C++基礎班就業班全套c++ c語言培訓教材 傳智播客c++推薦優秀課程,畢業就業首選C++培訓課程視頻地址:http://blog.sina.com.cn/s/blog_1706603600102wxlb.html傳智播客C++第15期2016最新整理傳智播客第15期C,C++基礎班就業班全套 2017最新整理傳智播客JavaEE第49期 基礎就業班傳智播客 黑馬程序員 javaee培訓 java高級轎車2017最新整理傳智播客JavaEE第49期 基礎就業班可以說是一套不可多的的教程,有條件的同學建議報名培訓,效果更佳,沒有條件的朋友就買個培訓課堂上錄制的視頻吧。視頻教程推送門:http://blog.sina.com.cn/s/blog_1706 傳智播客傳智匯第四期“激情點燃聖誕夜活動”成功舉行傳智匯12月23日,在聖誕節來臨之際,由傳智播客傳智匯舉辦的第四期線下活動在中關村創業大街成功舉行,本次活動以“激情點燃聖誕夜,狂歡盡在傳智匯”為主題,攜手北京電影學院學生舉辦的一場別開生面的高端私享聖誕狂歡晚會。 因報名人數較多,晚會到場參會人員是主辦方經過多輪篩選,最終僅有部分單身男士及單身美女幸運獲得 【傳智播客鄭州校區】數據庫MYSQL筆記詳解含義 訪問 面試題 增長 variable 切換 dos命令 技術 運行 第1章 數據庫1.1 數據庫概述l 什麽是數據庫數據庫就是存儲數據的倉庫,其本質是一個文件系統,數據按照特定的格式將數據存儲起來,用戶可以對數據庫中的數據進行增加,修改,刪除及查詢操作。l 什麽是數據 |