1. 程式人生 > >Hibernate_day03(轉載傳智播客的老師講義,博主只圖檢視方便)

Hibernate_day03(轉載傳智播客的老師講義,博主只圖檢視方便)

Hibernate_day03

上節內容

1 實體類編寫規則

 

2 hibernate主鍵生成策略

 

3 實體類操作

1crud操作

2)實體類物件狀態

 

4 hibernate的一級快取

 

5 hibernate的事務操作

1)事務程式碼規則寫法

 

6 hibernate其他的api(查詢)

今天內容

0 列表功能實現

 

1 表與表之間關係回顧

1)一對多(客戶和聯絡人)

2)多對多(使用者和角色)

 

2 hibernate

一對多操作

1)一對多對映配置

2)一對多級聯儲存

3)一對多級聯刪除

4inverse屬性

 

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

           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標籤進行配置,cascadesave-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 什麽是數據