《Java從入門到放棄》框架入門篇:hibernate中的多表對應關係

hibernate中的對應關係其實就是數據庫中表的對應關係,

就跟某些電影中的某些場景是一樣一樣滴。

比如可以是一男一女,還可以是一男多女,

更可以是多男一女,最後最後最後還可以是多男多女!!!

j_0040.gif



有些不純潔的看官肯定已經開始想歪了吧···,我還是上圖吧!請看下圖






wKioL1mWqsDitpk7AAXuWbYevXs133.png

我說滴是這樣滴一羣人打羣架滴場景,嘿嘿嘿···


好吧,進入正題!!!j_0029.gif

數據庫中表與表之間的數據映射關係有一對一,一對多,多對一,多對多。例如:

一個×××只能對應一個護照,一個護照也只能對應一個×××,這就是一對一的關係

一個男人可以有多個孩子,這多個孩子只能對應一個爹,從男人的角度這就是一對多的關係,而從孩子的角度,那就是多對一的關係

一個用戶可以買多件不同的商品,而某個商品也可以被多個用戶購買,這就是多對多的關係,一般多對多的關係,我們會再創建一個關係表來保存這種關聯,所以最後這三張表的關係就會變成兩個一對多的關係。

如果有不清楚的小夥伴,建議先學習一下數據庫再來繼續。


在實際開發中,用得最多的就是一對多和多對一,今天我們就來說說在hibernate中如何還配置這兩種關係。

一、一對多映射關係

我這兒舉的例子是個簡化版的博客數據庫,裏面有三張表,分別是:作者表、博客表、評論表。

wKiom1mWriGTwozqAABXRkNB7Is272.png

wKioL1mWrh7S4j5VAACII-K9O2o782.png

wKiom1mWriKwFnTHAAAd47JNMNE737.png


因爲是入門篇哈,所以表的結構進行了簡化,對應關係就是:一個作者可以有多個博客,一個博客可以有多個評論。


現在我們要實現這個一個需求:查詢作者,並且同時查詢出他的所有博客

1.1) 首先,使用DBBrowser來生成作者表和博客表對應的實體類和映射文件。

wKiom1mWrzDCjxAzAADVuGaiHHg403.png

    注意勾選下面的a<-b,因爲我是在author表上點的右鍵來生成,勾上這個選項就表示所有引用了author表的外鍵表都會關聯生成。

生成的author實體類就會多出一個SET集合。

wKiom1mWsBOzGHAeAABJ5mKGYaw607.png

我們手工把它改成泛型集合。

author的映射文件中也會多出一個SET標籤。

wKioL1mWsKvCmbEkAABKTwmu5ss109.png


1.2)這兒我們先不做修改,然後在Test類中編寫測試代碼:

public class Test {
    public static void main(String[] args) {

        Session session = HibernateSessionFactory.getSession();

        Author author = (Author)session.get(Author.class, 1);
        System.out.println("看SQL語句是在我之前還是之後!");
        System.out.println("作者:"+author.getUsername());
        //遍歷該作者的所有博客
        for (Blog blog : author.getBlogs()) {
            System.out.println("博客:"+blog.getTitle());
        }
        
        HibernateSessionFactory.closeSession();
    }
}

可以看到運行後的結果如下所示:

wKiom1mWsdPRxrhUAABzDRDxOgw448.png

從上面可以看到,雖然我們只是get了一個author對象,但在使用它內部的blog對象時,hibernate會自動去查詢該作者的所有博客,是不是非常方便,比我們自己寫JDBC的代碼要簡單很多了吧!!!j_0028.gif

馬上要回家了,今天先講到這兒吧·,看官們自己還有時間的話,可以再試試多對一的映射,如果都沒問題的話,後面還有幾個屬性要簡單介紹一下的:lazy、cascade、not-null、inverse、fetch

好了,今天就到這兒吧!j_0042.gif




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章