hibernate(一) 第一個hibernate工程


      序言

        其實hibernate已經學過一遍,不過因為太糊弄,急於求成,導致現在需要重新來學習,通過親自去敲每一行代碼,來去理解每一個知識點。

                                                                            ---WZY

 

一、什么是Hibernate?

      輕量級JavaEE應用的持久層框架,是一個完全的ORM框架。(說完這句話,肯定有很多人懵圈了,下面我來一個個解釋)

          持久化:將我們想要保存的數據保存到硬盤上,也就是我們電腦的磁盤上,為什么叫持久化呢,就是數據能夠保存的很久,所以叫持久化,現在對持久化的實現過程大多通過各種關系型數據庫完成,所以我們常說的,將數據保存到數據庫中,其實是數據庫幫我們幫數據保存到硬盤中了。

          

 

          持久層:既然知道了什么是持久化,那么持久化層也就應該有點思路了,這里吧數據庫看成是內存的一部分,我們就當做將數據保存到數據庫中,就保存到了硬盤中一樣,所以在操作數據庫的或者跟數據庫打交道的那一層就是就持久層,比如我們之前知道了三層架構,不就有專門跟數據庫打交道的一層叫做持久化層嗎

          ORM:Object Relational Mapping,對象關系映射,這個是一個思想,模型,或者說是規范。關系數據庫中的記錄映射成為程序語言中的對象實例,然后通過操作對象,來達到操作數據庫的這樣一種思想。如果沒有ORM思想,我們之前就是直接操作數據庫中的記錄字段,來達到存儲數據的目的。    

          持久化類:通過上面解釋的,持久化類就是可以將類保存到數據庫中,並還可以從數據庫中拿到該類,這就叫持久化類,也就是下面說到的POJO類

          持久化對象:持久化類的實例對象,能保存到數據庫中,也能從數據庫中取出來。

          JPA的概念:Java Persistence API java持久化API,也就是java持久化的規范,ORM就是這JPA中所定義的,它還規定了其它很多規范,JPA維護一個Persistence Context(持久化上下文),這就是這個持久化上下文來事。那些ORM框架都要依據JPA規范來設計,那么各個ORM框架也就度有這么個持久化上下文。持久化上下文大體內容:1、ORM元數據,JPA支持annotion(注解)或xml兩種形式描述對象/關系映射 2、實體操作API,實現對實體對象的CRUD操作    3、查詢語言,約定了面向對象的查詢語言JPQL(javaPersistence Query Language)

    

      知道了一些大概的名詞解釋,現在來看看hibernate在一個工程中到底處於一個什么樣的地位

      簡要體系架構結構

                

      簡要的hibernate體系架構就如上圖所示,就如我們說的那樣,hibernate在Application和Database之間,所以我們使用hibernate來實現對Database的操作。

        我們配置xxx.hbm.xml:目的就是為了hibernate與我們的application想關聯

        我們配置hibernate.cfg.xml:與數據庫相關的服務,例如:用戶名和密碼等。還有自身hibernate的服務。

      Hibernate全面解決方案體系架構

                

 

 

二、hibernate有什么作用?

          前面知道了什么事hibernate,其實也就是知道hibernate的一些特性,很虛的東西,但是我們用它到底來做什么呢?

    1、通過hibernate,完成POJO類到數據庫表的映射關系

    2、通過hibernate,只需要操作對象,hibernate就幫我們生成數據庫語句去操作數據庫,我們不必管下面的語句是怎么樣的。

    3、大概就是上面說的這兩個,就是讓用戶來對對象的增加、刪除、修改操作,來達到對數據庫表中數據的這種增刪改的操作。

 

 

 

三、使用hibernate需要導的jar包和jar包的意思?

      雖然不知道jar包的里面怎么實現的,但是還是有那個好奇心,必須知道這個jar包是干什么的,不然就像個傻子一樣就知道復制黏貼,我相信,學完這個hibernate,我就會知道jar包里面都有什么的。

      通過xxx.hbm.xml配置文件來反應pojo類和數據庫表的映射關系。

            

      基本的,只需要導入這上面11個jar包,如果需要別的功能,可能會導入額外的jar包

        antlr.jar:Another Tool for Language Recognition 可以構造語言識別器,為解析HQL(后面會講到,hibernate Query language)時使用

        commons-conllections.jar:就是加強版的collections。 比java.util.* 更強大的集合類

        dom4j.jar:解析xml用的,

        hibernate-jpa.jar 使用hibernate所依賴的jar包,jpa是一種規范,而hibernate是它的一種實現。

        hibernate3.jar:hibernate的核心jar包

        javassist.jar:操作字節碼文件,跟cglib有關(cglib應該是動態代理的一種,有jdk動態代理)

        jta.jar:java transaction api,就是跟事務有關的

        log4j.jar:log4j日志

        mysql-connector.jar:mysql的連接驅動包

        slf4j-api.jar:整合其它日志的規范接口,也就是如果要將其它日志的jar包整合進來就要符合該規范

        slf4j-log4j.jar:用來整合log4j和規范接口,讓log4j符合規范,這樣才能使用

 

  

四、如何實現POJO類到數據庫表的映射關系,xxx.hbm.xml配置文件發威了

         因為有這個配置文件,pojo類具有操作的能力了。

              

    

    1、dtd文件:在hibernate3.jar下的org.hibernate/hibernate-mapping-3.0.dtd中找到。

    2、基本的就只需要加<hibernate-mapping></hibernate-mapping>,在這對標簽下寫代碼,來映射。

    3、舉例說明,User.java   User.hbm.xml

        User.java

              

      User.hbm.xml

              

      主鍵生產策略:

            1、increment:主鍵自動增長、由hibernate來管理

                注意:如果數據庫也設置了自動增長,就會發生主鍵沖突問題

            2、identity:由底層數據庫來管理生成,不由hibernate管理

                也就是說底層數據庫怎么設置的主鍵就怎么來

                注意:mysql、sql server可以,oracle不可以

            3、sequence:標識符生成器,就是底層數據庫來管理生成,利用底層數據庫提供的序列來生成標識符,不由hibernate管理

                注意:mysql不支持序列  oracle支持

            4、native:由底層數據庫自己來決定使用什么策略,hibernate不管

                注意:mysql自動選擇identity、oracle自動選擇sequence

            5、uuid:隨機生成32位不相同的字符串。

      主鍵分自然主鍵和代理主鍵

            1自然主鍵:也就是在業務中有具體意義的主鍵,

            2代理主鍵,就是上面我們說的那5種,沒有任何意義,只是標識主鍵是唯一的。

      

      其它的一些配置信息,還有什么不理解的可以參考hibernate的api手冊。里面講解的非常詳細。

 

五、hibernate的配置,hibernate.cfg.xml

      有了xxx.hbm.xml這個映射文件還不夠,因為hibernate需要連接數據庫,那么這些操作放哪里呢,就提取出一個公用的配置文件出來,hibernate.cfg.xml就是這種公共的配置文件,加載數據庫連接的信息,和將各種映射文件加載進來,其實就是抽取出來的,因為有很多映射文件,每個映射文件都需要連接數據庫等操作,那么久將共同的操作提取出來形成了hibernate.cfg.xml。

            

 

      1、ddl策略:

            1、create、創建表,啟動的時候,先drop然后再創建表,(測試人員用來測試數據,先清除掉前面的舊表,在創建新表)

            2、create-drop:也表示創建,創建完后,就drop掉。(測試程序是否正確)

            3、update:檢測類和表是否一致,不一致就會做更新,將表更新到和類一樣

            4、validate:啟動時檢測表和類是否一致,不一致則報異常

              一般常用update、validate。

 

六、有了xxx.hbm.xml和hibernate.cfg.xml后,就能使用hibernate的功能了。

      

    

    說明:本章中截圖里面多了一個User類中多了個date屬性,是為了說明解釋xxx.hbm.xml中type屬性的。沒其他作用。可以忽視。

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM