1. 程式人生 > >hibernate 的第一個工程

hibernate 的第一個工程

一、什麼是Hibernate?

        Hibernate 是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,它將POJO與資料庫表建立對映關係,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任。

         Hibernate 完成物件模型和基於SQL的關係模型的對映關係
         Hibernate 較 iBatis 更具有面向物件的特徵
         Java EE 5 拋棄了傳統的 Entity EJB,改用 JPA(Java Persistence API java持久化API)作為持久層解決方案
         低侵入,不要求 PO 繼承Hibernate的某個超類或實現 Hibernate 的某個介面
         Hibernate 使得 Java EE 應用的 OOA、OOD、OOP 三個過程一脈相承,成為一個整體
         程式語言和底層資料庫發展不協調催生出了ORM框架(物件/關係資料庫對映 一種規範)
         面向物件程式設計優勢(面向物件建模、操作 多型、繼承 擯棄難以理解的過程 簡單易用)
         關係資料庫的優勢(大量資料查詢、排序、集合資料連線操作、對映 併發、事務、約束、隔離)
         操作持久化物件 (面向物件的操作轉化為底層的 SQL 操作)
 

 

流行的ORM框架 
        JPA(官方標準 jBPM未來都將會採用JPA作為持久層解決方案)
        Hibernate(屬於JBoss、Red Hat 優秀的效能 豐富的文件)
        iBATIS SQL Mapping 框架,允許直接編寫SQL語句
        TopLink Oracle 公司產品
        資料為中心的程式,使用儲存過程實現商業邏輯 Hibernate不是好方案
        中介軟體應用,採用面向物件的業務模型和商業邏輯 Hibernate是最有用的
        類到表的對映(包括java資料型別到SQL資料型別的對映)

 

  Hibernate優勢:開源免費,輕量級,可擴充套件性,API 開放,開發者活躍

 

二、hibernate有什麼作用?

        瞭解了 hibernate 的一些特性,很虛的東西,但是我們用它到底來做什麼呢?

       1、通過hibernate,完成POJO類到資料庫表的對映關係

       2、通過hibernate,只需要操作物件,hibernate就幫我們生成資料庫語句去操作資料庫,我們不必管下面的語句是怎麼樣的。

       3、大概就是上面說的這兩個,就是讓使用者來對物件的增加、刪除、修改操作,來達到對資料庫表中資料的這種增刪改的操作。

 

三、hibernate 第一個工程,操作步驟如下:

1、建立新的 java 專案,名為:hibernate_test,如下圖:

      

 

2、加入響應的 jar 包

    a)、選單 Window --> Preferences --> Java --> Build Path --> User Libraries,點選按鈕 “New”,命名為 “hibernate”,如下圖:

             

 

    b)、接著上面的操作,然後選擇“hibernate”,點選“Add External JARs...”,把下面的這些 jar 引入新增進去,分別是:

             hibernate-distribution-3.3.2.GA\hibernate3.jar(核心JAR包

             hibernate-distribution-3.3.2.GA\lib\required\ 目錄下的所有 jar 包

             slf4j-1.5.8\slf4j-nop.jar

             點選按鈕 “確定”,

             如下圖:

             

 

    c)、將剛剛建立的那些 jar 包引入工程,點選專案(hibernate_test),滑鼠右擊,選擇 Build Path --> Add Libraries... --> User Library,點選按鈕 “Next”;

             注意:你選中工程,如果右鍵選中 Build Path 裡面沒有 Add Libraries... ,右鍵工程選中 Configure Build Path ,進入後,左邊欄選中 java Build Path,再選中右邊的 Libraries,再選 Add Libraries... 新增就可以了

             如下圖:

             

 

 

3、引入 mysql 的 JDBC 驅動包

      選單 Window --> Preferences --> Java --> Build Path --> User Libraries,點選按鈕 “New”,命名為 “Driver”,然後點選 “Driver”,點選按鈕 “Add External JARs...”,點選按鈕 “確定”, 如下圖:

      

 

 

4、將驅動引入專案工程,點選專案(hibernate_test),滑鼠右擊,選擇 Build Path --> Add Libraries... --> User Library,點選按鈕 “Next”;

      注意:你選中工程,如果右鍵選中 Build Path 裡面沒有 Add Libraries... ,右鍵工程選中 Configure Build Path ,進入後,左邊欄選中 java Build Path,再選中右邊的 Libraries,再選 Add Libraries... ,然後再勾選 “Driver” 新增就可以了

      如下圖:

      

      

 

5、登陸本地 MySQL,如下圖:

     

 

 

6、在 MySQL 中建立對應的資料庫及表

      a)、create database hibernate;
      b)、use hibernate;
      c)、create table Student( id int primary key, name varchar(20), age int );

      如下圖:

      

 

 

7、建立 hibernate 配置檔案 hibernate.cfg.xml,正常來說,這個檔案建立在 src 目錄下面,如下圖:

      

 

 

     hibernate.cfg.xml 檔案裡面的內容為:

     注意:  

            a)、從參考文件中拷貝
            b)、修改對應的資料庫連線
            c)、註釋掉暫時用不上的內容     

複製程式碼

<?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>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/hibernate</property> <!-- hibernate是資料庫的名字 -->
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <!-- JDBC connection pool (use the built-in) -->
        <!-- <property name="connection.pool_size">1</property> -->

        <!-- SQL dialect(方言), 資料庫的連線方式 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <!-- <property name="current_session_context_class">thread</property> -->

        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <!-- <property name="hbm2ddl.auto">update</property> -->

        <mapping resource="hibernate/model/Student.hbm.xml" /> <!-- 這個是Hibernate的寫法 -->

    </session-factory>

</hibernate-configuration>

複製程式碼

 

8、建立 Student 類,如下圖:

      

 

      Student 類的內容為:      

複製程式碼

package hibernate.model;

public class Student {
    
    private int id;
    private String name;
    private int age;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

複製程式碼

 

9、建立 Student 對映檔案 Student.hbm.xml

      注意:參考文件

      如下圖:

      

 

            Student.hbm.xml 檔案內容為:            

複製程式碼

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<!-- 這個檔案是用來建立資料庫表與類對應的對映關係 -->


<hibernate-mapping package="hibernate.model">

    <class name="Student">
        <id name="id"></id>
        <property name="name"></property>
        <property name="age"></property>
    </class>

</hibernate-mapping>

複製程式碼

 

10、將對映檔案加入到 hibernate.cfg.xml 中

      注意:參考文件

      如下圖:

      

 

11、寫測試類main,在 main 中對 Student 物件進行直接的儲存測試

        如下圖:

        

       

        測試類的檔案內容為:

 

package hibernate.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import hibernate.model.Student;

/**
 * 測試將資料存入MySQL資料庫中
 */
public class StudentTest {
    
    public static void main(String[] args) {
        
        Student s = new Student();
        s.setId( 1 );
        s.setName( "I Love you" );
        s.setAge( 18 );
        
        Configuration cfg = new Configuration();
        SessionFactory sf = cfg.configure().buildSessionFactory();
        Session session = sf.openSession();
        
        // 在hibernate裡面, 所有的操作都應放在事務裡面
        session.beginTransaction();
        
        // 將資料儲存到資料庫裡面
        session.save( s );
        
        // 提交資料
        session.getTransaction().commit();
        
        // 關掉資料庫連線
        session.close();
        sf.close();
        
        String str = "\u4ea4\u6613\u6210\u529f";
        System.out.println( str );
    }
}

複製程式碼

 

12、FAQ
        a)、要呼叫 new Configuration().configure().buildSessionFactory(),而不是省略

 

13、執行程式,如下圖:

 

14、登入 MySQL,檢視剛剛建立的那個資料庫,如下圖:

        

 

--- end ---

以上是 hibernate 第一個程式的全過程。