1. 程式人生 > >day26HibernateDay01(框架的搭建 核心和基本檔案配置 基礎crud)

day26HibernateDay01(框架的搭建 核心和基本檔案配置 基礎crud)

1、CRM
    CRM(Customer Relationship Management)客戶關係管理,利用相應的資訊科技以及網際網路技術來協調企業和客戶間在銷售、營銷和服務商的互動,
    向客戶通過創新式的個性化的客戶互動和服務的過程。

    其最終目標是將面向客戶的各項資訊和活動整合起來,組建一個以客戶為中心的企業,實現對面向客戶的活動的全面管理
2、CRM的模組
    CRM系統熟悉了對企業銷售、營銷、服務等各階段的客戶資訊、客戶獲得進行統一管理
    CRM系統功能涵蓋企業銷售、營銷、使用者服務等各各業務流程,業務流程中與客戶相關獲得都會在CRM系統統一管理
    基本的功能模組
        客戶資訊管理
        聯絡人管理
        商機管理
        統計分析等

Hirbernate框架概述
1、Hibernate     
    是一個開放原始碼的物件關係對映(ORM)框架,對JDBC進行了非常輕量級的物件封裝,使得JAVA程式設計師可以使用物件程式設計思維來操縱資料庫

    可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/jsp的web應用中使用
    是輕量級JAVAEE應用的持久層解決方案,是一個關係資料庫ORM框架

2、Hibernate是一個持久層的ORM框架

ORM對映 
1、Object Relational Mapping
    O:面向物件領域的Object(JavaBean物件)
    R:關係資料庫領域的Relational(表的結構)
    M:對映Mapping(XML的配置檔案)
2、Hibernate通過操作物件的方式來操作資料庫表記錄

優點
    對JDBC訪問資料庫的程式碼做了封裝,大大簡化了資料訪問層繁瑣的重複性程式碼
    基於Jdbc的主流持久化框架,是一個優秀的orm實現,很大程度的簡化了dao層編碼工作
    效能非常好,是一個輕量級框架,對映的靈活性很出色,支援很多關係型資料庫,從一對多到多對多的各種複雜關係
    EJB:SUN公司提供編寫JavaEE的整體框架【重量級】

下載相應的jar包
    http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/hibernate-release-5.0.7.Final.zip/download

建立類與表結構的對映
在JavaBean所在的包下建立對映的配置檔案
    預設的命名規則為:實體類名.hbm.xml
    在xml配置檔案中引入約束(引入的是hibernate3.0的dtd約束,不要引入4的約束)
        <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EB"
         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

    如果不能上網,編寫配置檔案是沒有提示的,需要自己來配置

        先複製"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"->window->preferences->搜尋xml->選擇 xml catalog 
        ->add->選擇uri->貼上複製的地址->選擇location,選擇本地的DTD的路徑 hibernate-mapping-3.0.dtd

Hibernate核心的配置檔案    
hibernate-release-5.0.7.Final\project\etc 可以看hibernate.cfg.xml配置不同資料庫檔案的格式

1、下載Hibernate框架的開發包
2、編寫資料庫和表結構
3、建立WEB的專案,匯入了開發的jar包
    MySQL驅動包、Hibernate開發的必須要有的jar包、日誌的jar包
4、編寫JavaBean,以後不使用基本資料型別,使用包裝類
5、編寫對映的配置檔案(核心),先匯入開發的約束、裡面正常配置標籤
6、編寫hibernate的核心的配置檔案。裡面的內容是固定的
7、編寫程式碼、使用的類和方法

Hibernate配置檔案之對映配置檔案
1、對映檔案,即Stu.hbm.xml的配置檔案
    <class>標籤           用來將類與資料庫表建立對映關係
        name            類的全路徑
        table           表名(類名與表名一致,那麼table屬性也可以忽略)
        catalog         資料庫的名稱,基本都會省略不寫

    <id>標籤              用來將類中的屬性與表中的主鍵建立對映,id標籤就是用來配置主鍵的
        name            類中屬性名
        column          類中的欄位名,(如果類中的屬性名和表中的欄位名一致,那麼column可以省略)
        length          欄位的長度,如果資料庫已經建立好了,那麼length可以不寫,如果沒有建立好,生成表結構時,length最好指定

    <property>          用來將類中的普通屬性與表中的欄位建立對映
        name            類中屬性名
        column          表中的欄位名(如果類中的屬性名與表中的欄位名一致,那麼column可以省略)
        length          資料長度
        type            資料型別(一般不需要寫,如果寫要按照規則來編寫)
            Hibernate的資料型別 type="string"
            Java的資料型別      type="java.lang.String"
            資料庫欄位的資料型別 <column name="name" sql-type="varchar"/>

核心配置檔案
1、核心配置檔案的兩種方式
    1、屬性檔案的形式,即properties的配置檔案
        hibernate properties
            hibernate connection,driver_class =com.mysql.jdbc.Driver
        缺點
            不能載入對映的配置檔案,需要手動編寫程式碼去載入
    2、XML檔案的形式,基本都會選擇這種方式
        hibernate.cfg.xml
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        優點
            格式比較清晰
            編寫有提示
            可以在該配置檔案中載入對映的配置檔案(最主要)
2、關於hibernate.cfg.xml的配置檔案方式
    必須有的配置
        資料庫連線資訊
            hibernate.connection.driver_class       連線資料庫驅動程式
            hibernate.connection.url                連線資料庫URL
            hibernate.connection.username           資料庫使用者名稱
            hibernate.connection.password           資料庫密碼

        方言
            hibernate.dialect                       操作資料庫方言

        可選的配置
            hibernate.show_sql                      顯示sql   
            hibernate.format_sql                    格式化sql
            hibernate.hbm2ddl.auto                  通過對映轉成DDL語句
                create          每次都會建立一個新的表--測試的時候
                create-drop     每次都會建立一個新的表,當執行結束之後,將建立的這個表刪除--測試的時候
                update          如果有表,使用原來的表,沒有表,建立一個新的表,同時更新表結構
                validate        如果有表,使用原來的表,同時校驗對映檔案與表中欄位是否一致如果不一致就會報錯

        載入對映
            如果xml方式<mapping resource="my/hibernate/domain/User.hbm.xml"

Configuration類和作用
1、Configuration類
    Configuration物件用於配置並啟動Hibernate
    Hibernate應用通過該物件來獲取物件-關係對映檔案中的元資料,以及動態配置Hibernate的屬性,然後建立SessionFactory物件

    一句話:載入Hibernate的配置檔案,可以獲取SessionFactory物件

2、Configuration類的其他應用
    載入配置檔案的種類,Hibernate支援xml和properties型別的配置檔案,在開發中基本都使用XML配置檔案的方式
        如果才有properties的配置,那麼通過Configuration configuration = new Configuration(),就可以載入配置檔案
            但是需要自己手動載入對映檔案
            例如config.addResource("my/customer/Customer.hbm.xml");

        如果採用XML配置檔案 通過Configuration configuration = new Configuration().configure();載入配置檔案

SessionFactory
1、是工廠類,是生成Session物件的工廠類
2、SessionFactory類的特點
    由Configuration通過載入配置檔案建立物件
    SessionFactory物件中儲存了當前的資料庫配置資訊和所有對映關係以及預定義的SQL語句,同時,SessionFactory還負責維護Hibernate的耳機快取
        預定義SQL語句
            使用Configuration類建立了SessionFactory物件時,已經在SessionFactory物件中快取了一些SQL語句
            建立的SQL語句是增刪改查(通過主鍵來查詢)
            這樣做的目的是效率更高

    一個SessionFactory例項對應一個數據庫,應用從該物件中獲取Session例項
    SessionFactory是執行緒安全的,意味著一個例項可以被應用的多個執行緒共享
    SessionFactory是重量級的,意味著不能隨意建立或銷燬它的例項。
    如果只訪問一個數據庫,只需要建立一個SessionFactory例項,且在應用初始化的時候完成

    SessionFactory需要一個較大的快取,用來存放預定義的SQL語句以及實體的對映資訊,
    另外可以配置一個快取外掛,這個外掛被稱為Hibernate的二級快取,被多執行緒所共享
3、總結
    一般應用使用一個SessionFactory,最好是應用啟動時就完成初始化

Session介面
1、概述
    Session是Hibernate中使用的最頻繁的介面,也被稱之為持久化管理器,提供了和持久化有關的操作,比如新增、修改、刪除、載入和查詢實體物件
    Session是應用程式與資料庫之間互動操作的一個單執行緒鍍錫,是Hibernate運作的中心
    Session是執行緒不安全的
    所有持久化物件必須在session的管理下才可以進行持久化操作
    Session物件有一個一級快取,顯式執行flush之前,所有的持久化操作的資料都快取在session物件處
    持久化類與Session關聯起來後就具有了持久化的能力

2、特點
    不是執行緒安全的,應便面多個執行緒使用同一個Session例項
    Session是輕量級的,建立和銷燬不會消耗太多的資源,應為每次客戶請求分配獨立的Session例項
    Session有一個快取,被稱之為Hibernate的一級快取,每個Session例項都有自己的快取

3、常用的方法
    save(obj)
    delete(obj)
    get(Class.id)
    update(obj)
    saveOrUpdate(obj)       儲存或者修改(如果沒有資料,儲存資料,如果有,修改資料)
    createQuery()           HQL語句的查詢的方式 ("from Customer")

Transaction介面
1、Transaction是事務的介面
2、常用的方法
    commit()    提交事務
    rollback()  回滾事務
3、特點
    Hibernate框架預設情況下事務不自動提交,需要手動提交事務
    如果沒有開啟事務,那麼每個Session的操作,都相當於一個獨立的事務