Hibernate基礎-HelloWord

TZQ_DO_Dreamer發表於2014-11-06
1. ORM ORM (Object /Relation Mapping ): 物件/關係對映(理解)
     1 ORM 主要解決物件 -關係的對映
     2 .ORM的思想:將關聯式資料庫中表中的記錄對映成為物件,以物件的形式展現,程式設計師可以把對資料庫的操作轉化為對物件的操作。

2. Hibernate  HelloWord
     1 . 加入 jar 包:加入到當前專案的 classpath 下                            
          hibernate-release-4.2.4.F inal\lib\required\*.jar(所有的包)                                           
          MySQL 的驅動mysql -connector -java -5.1.29 -bin.jar                                          

     2 . 配置 hibernate 的配置檔案: hibernate.cfg.xml
    
. 利用 hibernate 外掛生成 hibernate.cfg.xml

          <?xml version ="1.0" encoding="UTF-8"?>
          <!DOCTYPE hibernate -configuration PUBLIC
               "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
               "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd ">
          <hibernate-configuration>
               <session -factory >
             
               </session -factory >
          </hibernate-configuration>

     . 編輯 hibernate.cfg.xml 檔案

     I. 加入連結資料庫的基本資訊:

         <! -- 配置連線資料庫的基本資訊 -->
         <property name ="connection.driver_class" >com.mysql.jdbc.Driver </property >
         <property name ="connection.username" >root </property >
         <property name ="connection.password" >123456 </property >
         <property name ="connection.url" >jdbc :mysql:///hibernate4</property>

     II. 配置 Hibernate 使用的資料庫方言:
         每一種資料庫使用的基本語法會有細微的區別,例如分頁 MySQL 使用 limit,而 Oracle 使用 rownum。這就需要告訴 Hibernate 底層使用的是哪一種資料庫

         <! -- 配置 Hibernate 的資料庫方言 -->
         <property name ="dialect" >org.hibernate.dialect.MySQLInnoDBDialect </property >
  
         注意:方言對應的類來自於 hibernate-release- 4.2.4.Final\project\etc\hibernate.properties 
    
    III. 編輯 Hibernate 的一般屬性

         <! -- 建立資料表的策略(瞭解,最多使用的值是 update -->
         <property name ="hbm2ddl.auto" >update </property >

         > create : 每次執行都會刪除上一次的表 ,重新生成表 , 哪怕二次沒有任何改變
         > create -drop :會根據 .hbm.xml 檔案生成表, 但是SessionFactory 一關閉,  表就自動刪除
         > update :最常用的屬性值,也會根據 .hbm.xml 檔案生成表 , 但若 .hbm.xml  檔案和資料庫中對應的資料表的表結構不同 ,
            Hiberante  將更新資料表結構,但不會刪除已有的行和列
         > validate : 會和資料庫中的表進行比較 ,  .hbm.xml 檔案中的列在資料表中不存在,則丟擲異常


         <! -- 是否列印 SQL -->
         <property name ="show_sql" >true</property>

         <! -- 是否格式化 SQL -->
         <property name ="format_sql" >true</property>

3 . 編寫實體類( POJO)及 Hibernate 對映檔案: xxx.hbm.xml

    I. 編寫一個 POJO :必須包含一個 OID 欄位和資料表主鍵對應;必須有一個無引數的構造器;為欄位定義 getter setter;非 final 

    II.  hibernate 外掛生成 xxx.hbm.xml 檔案

    注意:需要對檔案進行簡單的修改:修改主鍵生成方式(使用 id  generator 子節點的 class 屬性配置主鍵的生成方式, native 表示使用資料庫本地的方式來
    生成主鍵, MySQL 會自動的選用 auto_increment,而 Oracle 則使用序列的方式

    <generator class ="assigned" /> 修改為 <generator class="native" />

    III.  hibernate 配置檔案(hiberante.cfg.xml )中關聯 hibernate 持久化類的對映檔案
    <mapping resource ="com/atguigu/hibernate/entities/News.hbm.xml" />

4 . 通過 Hibernate API 完成持久化操作

    1. 建立 SessionFactory : Session 的工廠類。SessionFactory 是執行緒安全的,一般地,在一個 Java 應用中只有一個 SessionFactory 例項
        Configuration configuration = new Configuration ().configure ();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings( configuration.getProperties())
                                                      .buildServiceRegistry ();
        SessionFactory sessionFactory = configuration.buildSessionFactory (serviceRegistry );

    2. 建立 Session : 表示 Hibernate 應用程式和資料庫的一次會話
        Session session = sessionFactory.openSession ();

    3. 開啟事務
        Transaction transaction = session.beginTransaction ();

    4. 執行持久化操作
         //save
         //session.save (news );

         //利用 OID 載入物件
        News news2 = (News ) session.get (News.class , 1);
        System.out.println (news2 );
        news2.setContent ("myBatis" );

    5. 提交事務
        transaction.commit ();

    6. 關閉 Session
        session.close ();

    7. 關閉 SessionFactory
        sessionFactory.close ();
        


    ★寫測試類的時候一般採用註解更方便些:
        public class Testing {
            private SessionFactory sessionFactory ;
            private Session session ;
            private Transaction transaction = null ;
            
            @Before
            public void init (){
                Configuration configuration = new Configuration ().configure ();
                ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings( configuration.getProperties()).buildServiceRegistry();
                sessionFactory = configuration.buildSessionFactory (serviceRegistry );
                
                session = sessionFactory.openSession ();
                transaction = session.beginTransaction ();
             }
            
            @After
            public void destroy (){
                transaction.commit ();
                session.close ();
                sessionFactory.close ();
             }
            
            @Test
            public void test (){
                //測試部分
             }
         }      
        


相關文章