Java程式員從笨鳥到菜鳥之(五十一)細談Hibernate(二)開發第一個hibernate基本詳解

來源:互聯網
上載者:User

       在上篇部落格中,我們介紹了《hibernate基本概念和體繫結構》,也對hibernate架構有了一個初步的瞭解,本文我將向大家簡單介紹Hibernate的核心API調用庫,並講解一下它的基本配置。核心API的底層實現和源碼解析將在以後的部落格中一一為大家講解。

首先我們一起來看一下開發一個hibernate應用程式的大體流程是什麼樣的(流程順序可以顛倒):

•建立Hibernate的設定檔

•建立持久化類

•建立對象-關係對應檔

•通過Hibernate API編寫訪問資料庫的代碼

 

關於設定檔推薦閱讀:細談Hibernate(四)Hibernate常用設定檔詳解

 

     知道了開發流程,那麼我們就開始我們的第一hibernate應用程式,首先我們以一個簡單的學生管理應用程式來作為我們第一hibernate應用程式的開發,讓大家熟悉一下hibernate的開發流程,以及對相對應功能的API有初步的認識,Hibernate應用程式定義了一些持久類,並且定義了這些類與資料庫表格的映射關係。在我們這個簡單的學生管理應用程式中包含了一個類和一個對應檔。讓我們看看這個簡單的持久類包含有一些什嗎?對應檔是怎樣定義的?另外,我們該怎樣用Hibernate來操作這個持久類。

Hibernate開發全面流程和開發配置

首先建立一個項目。然後建立配置開發環境,主要步驟如下:

MyEclipse-->ProjectCapabilities-->add Hibernate Capabilities,視圖如下:

                             

複選框選中第二個copychecke。。。。那一個。然後點擊next;

                              

為了鍛煉能力,設定檔第一次手寫,不用圖形介面自動產生,所以把: Open configurationfile after wizard completion 選中的點掉;點擊next

                                

Specify database connection details把這也點掉;點擊next;

                                    

全部都用手寫,所以把create sessionFactry class此處也點掉;點擊Finish;然後lib裡面會自動增加一系列jar包

                                                        

並且src裡面也產生了hibernate.cfg.xml,:

由於本人此次練習的是整合Struts與Hibernate進行應用的開發

所以還要進行struts相關檔案的配置,由於struts相關檔案配置比較簡單,所以此處省略;

首先編寫一個持久化類:本人建立的是person類:模型類即為javabean,很簡單;

註:持久化類符合JavaBean的規範,包含一些屬性,以及與之對應的getXXX()和setXXX()方法。

•持久化類有一個id屬性,用來惟一標識Person類的每個對象。在物件導向術語中,這個id屬性被稱為物件識別碼(OID,Object
Identifier)

•Hibernate要求持久化類必須提供一個不帶參數的預設構造方法

下一步即寫一個提交到資料庫內容的表單,簡單的表單不在此處寫了。然後寫一個action,獲得表單的內容:此處action中的處理方法:execute()裡面主要是把表單所要提交的資訊調用模型類封裝成一個類

下一步即將和hibernate的API打交道了。。。編寫工具類HibernateUtil這個類主要是獲得和資料庫打交道的Session類

主要代碼:privatestatic SessionFactory sessionFactory;//由於一共只有一個SessionFactory所以把建立SessionFactory的代碼放到static代碼塊裡面,讓他只建立一次    static {        try {            /**             * 建立SessionFactory過程:             * 1.new Configuration().configure()獲得一個configuration的執行個體             * 2.configuration.buildSessionFactory()獲得建立session的工廠sessionFactory的執行個體註:Configuration類用來管理我們的設定檔的資訊的,通過它,我們可以通過建立一個configuration執行個體來管理相應的配置文檔,但是通常我們只建立一個configuration執行個體。             * */                  sessionFactory = new Configuration().configure()                    .buildSessionFactory();        } catch (Exception e) {            e.printStackTrace();        }    }    publicstatic Session openSession(){        //獲得與資料庫打交道的執行個體session        Session session=sessionFactory.openSession();        //把工具session返回給調用者        return session;    }   

注意:此Session非彼Session(HttpSession)

一個SessionFactory執行個體對應一個資料存放區源,應用從SessionFactory中獲得Session執行個體。

SessionFactory有以下特點:

–它是安全執行緒的,這意味著它的同一個執行個體可以被應用的多個線程共用。

–它是重量級的,這意味著不能隨意建立或銷毀它的執行個體。如果應用只訪問一個資料庫,只需要建立一個SessionFactory執行個體,在應用初始化的時候建立該執行個體。如果應用同時訪問多個資料庫,則需要為每個資料庫建立一個單獨的SessionFactory執行個體。

 

Session介面是Hibernate應用使用最廣泛的介面。

•Session也被稱為持久化管理器,它提供了和持久化相關的操作,如添加、更新、刪除、載入和查詢對象。

•Session有以下特點:

–不是安全執行緒的,因此在設計軟體架構時,應該避免多個線程共用同一個Session執行個體。

–Session執行個體是輕量級的,所謂輕量級是指它的建立和銷毀不需要消耗太多的資源。這意味著在程式中可以經常建立或銷毀Session對象,例如為每個客戶請求分配單獨的Session執行個體,或者為每個工作單元分配單獨的Session執行個體。

Session介面提供了操縱資料庫的各種方法,如:

–save()方法:把Java對象儲存資料庫中。

–update()方法:更新資料庫中的Java對象。

–delete()方法:把Java對象從資料庫中刪除。

–get()方法:從資料庫中載入Java對象。

 

然後在編寫用session處理資料類DAO類,先編寫有關介面然後編寫實作類別personDaoImpl,這個類主要用session處理資料執行事務的類:

範例程式碼:

//調用工具類獲得sessionSession session = factory.openSession();Transaction tx;try {//開始一個事務tx = session.beginTransaction();//執行事務Student stu=new Student(“李華”,”男”,”山東”); Session.save(stu);//提交事務tx.commit();}catch (Exception e) {//如果出現異常,就撤銷事務if (tx!=null) tx.rollback();throwe;}finally {//不管事務執行成功與否,最後都關閉Sessionsession.close();}

                                                   

然後編寫邏輯處理類(服務類):先寫有關介面,然後寫實作類別.這個類主要用於處理一些邏輯處理,在這個地方主要用於調用資料處理類DAO進行資料處理

publicclass PersonServiceImpl implements PersonService {     publicvoid savePerson(Person person)    {        PersonDAO personDAO = new PersonDAOImpl();        personDAO.savePerson(person);    }}

 然後直接在action裡面寫出PersonServiceImpl執行個體進行調用其方法進行就可以了。Action裡面主要處理方法程式碼範例

 

public String execute() throws Exception    {        Person person = new Person();               person.setUsername(username);        person.setPassword(password);        person.setAge(age);    java.sql.Date registerDate = new java.sql.Date(new                  java.util.Date().getTime());        System.out.println("222222");        person.setRegisterDate(registerDate);               PersonServiceImpl personService = new PersonServiceImpl();               personService.savePerson(person);               returnSUCCESS;           }

 寫到這,一個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>    <property name="connection.url">jdbc:sqlserver://localhost:1433; DatabaseName=Hibernate</property>    <property name="connection.username">sa</property>    <property name="connection.password">123456</property>    <property    name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>    <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>    <property name="show_sql">true</property>    <mapping resource="Person.hbm.xml"/>//映射到具體person表的設定檔    </session-factory> </hibernate-configuration>


注意:

Hibernate的描述檔案中存放資料庫連接驅動程式類,登陸資料庫的使用者名稱/密碼,映射實體類設定檔的位置等資訊。

•將該設定檔存放在src目錄下

描述檔案相關屬性描述含義:

                                

最後一步:

對持久化(實體)類Person.java檔案建立一個Hibernate對應檔Person.hbm.xml

Java的實體類是通過設定檔與資料表中的欄位相關聯。Hibernate在運行時解析設定檔,根據其中的欄位名產生相應的SQL語句

•將該檔案存放在src目錄下

具體程式碼範例:

 

<?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>    <class name="com.csh.model.Person" table="person">      <id name="id" column="id"  type="int">         <generator class="increment"></generator>        </id>     <property name="username" column="username" type="string"></property>     <property name="password" column="password" type="string"></property>     <property name="age" column="age" type="int"></property>     <property name="registerDate" column="registerDate" type="date"></property>    </class></hibernate-mapping>


註:id元素對應的一定是資料庫的主鍵列;class="increment"意為自增

                                                   

<property>元素映射值   類型屬性

•name屬性:指定持久化類的屬性的名字。

•type屬性:指定Hibernate或Java映射類型。Hibernate映射類型是Java類型與SQL類型的橋樑。

•column屬性:指定與類的屬性對應的表的欄位名。

                            

至此,hibernate開發過程和相關配置就此完畢

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.