Hibernate實戰(一)

來源:互聯網
上載者:User
Hibernate實戰

 bromon原創 請尊重著作權

   對象關係映射(Object Relative Mapping)簡稱ORM,是物件導向開發的一個熱點,用來解決JDBC開發中手動進行OR映射的繁雜與不便。EJB中的實體Bean在這個領域是很著名的——既因為它的先進而著名,也因為它的低效而著名。有過實體Bean開發經驗的人可能都會為實現遠程介面造成的效率低下而頭痛,在很多不大不小的項目中,使用實體Bean是否得不償失,爭論很大。一個輕量級的持久化方案也許能夠解決一些問題,Hibernate應此而生。

   Hibernate是一個中介層,它的目的是把資料庫中的關係通過一定的規則映射成為對象,讓Java開發人員不用太多的考慮底層資料庫的問題,只需要像通常情況下管理對象一樣的管理資料。在關聯式資料庫仍將持續佔據市場的情況下,它很可觀。在資料持久化領域,即便是輕量級的方案也會是複雜饒舌的,也許如同周杰倫的音樂一樣不知所云。在學習它之前,最好先回想一下以前進行資料庫開發中遇到的問題和不便,想想為什麼需要一個持久化層,才能知道很多操作的目的是什麼,以及為什麼要這麼幹,在這個問題上我不想做更多的敘述,因為“長久以來……”這樣的句式通常long(不好意思,打不出來)長,會對我的鍵盤和熱情造成很大的磨損。如果讓我寫一本書,那麼我會樂意去敘述什麼是資料持久化,它有什麼好處等等。廢話少說,來了。

   首先需要配置環境,下載Hibernate 2.1(www.hibernate.org),把lib下的*.jar添加到classpath,你的資料庫JDBC驅動程式也應該在classpath中。開啟hibernate.properties,針對你使用的資料庫,配置相應的資訊,比如我使用的是MS SQL Server,配置如下:

 ## MS SQL Server

 hibernate.dialect net.sf.hibernate.dialect.SQLServerDialect
 hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
 hibernate.connection.url jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=zizz
 hibernate.connection.username sa
 hibernate.connection.password

   其中很大部分是已經寫好的,只需要取掉注釋即可,我自己只是修改了資料庫名稱、帳號、密碼。建立一個名為zizz的資料庫備用。

   然後把這個檔案拷貝到你的應用的根目錄下。

   我們談論了很多次映射,應該首先來看看這個映射是如何完成的。假設一個最簡單的應用,寫一個功能最單一的留言板,設計的資料有留言的編號、留言者名稱、留言內容,還有留言時間。足夠簡單吧,換做是你打算怎麼幹?我猜你要首先建立一個資料庫表格,名字也許叫做guestbook。No,這不是物件導向的方式,不妨首先從對象的角度來考慮。我們當然希望每一條留言都以對象的方式呈現,每個對象應該具有的屬性有:id、author、content、time。偷個懶,沒有畫UML。下面這個類應該是很容易理解的:

 //GuestBook.java
 package org.bromon.zizz;

 import java.util.*;

 public class GuestBook
 {
 private int id;
 private String author;
 private String content;
 private Calendar time;

 private void setId(int id)
 {
  this.id=id;
 }
 public int getId()
 {
  return(id);
 }

 public void setAuthor(String author)
 {
  this.author=author;
 }
 public String getAuthro()
 {
  return(author);
 }

 public void setContent(String content)
 {
  this.content=content;
 }
 public String getContent()
 {
  return(content);
 }

 public void setTime(Calendar time)
 {
  this.time=time;
 }
 public Calendar getTime()
 {
  return(time);
 }
 } 

   基本上是最簡單的Bean了,如果覺得困難的話,請你先回火星等我。

   需要注意的是setId方法被指定為private,這是因為我希望用這個欄位做主鍵,它最好由系統自動產生,所以不應該由使用者來指定,這個方法專為Hibernate準備,所以是私人的。

   如何把這個類與資料庫映射起來?看看Hibernate的魔法,使用一個XML檔案來描述,它應該被命名為GuestBook.hbm.xml:

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

 <hibernate-mapping package="org.bromon.zizz">
    <class name="GuestBook" table=”guestbook" lazy="true">
        <id name="id" type="integer" unsaved-value="null">
   <column name="id" sql-type="int" not-null="true"/>
   <generator class="identity"/>
  </id>
        
  <property name="author" column="author" not-null="true" unique="false"/>
 <property name="content" column="content" not-null="true"/>
  <property name="time" column="time" not-null="true"/>
    </class> 
 </hibernate-mapping> 

 雖然有點陌生,但是很易讀,仔細琢磨一下。

 下面來編寫我們的應用,它的功能是插入資料:

 //Operate.java
 package org.bromon.zizz;
 import net.sf.hibernate.*;
 import net.sf.hibernate.cfg.*;
 import net.sf.hibernate.tool.hbm2ddl.*;
 import java.util.*;

 public class Operate
 {
 public static void main(String args[])
 {
  try
  {
   Configuration cfg=new Configuration().addClass(GuestBook.class);
   SessionFactory sessions=cfg.buildSessionFactory();
   new SchemaExport(cfg).create(true,true);
   Session session=sessions.openSession();
   
   GuestBook gb=new GuestBook();
   gb.setAuthor(“Bromon”);
   gb.setContent(“留言的內容”);
   gb.setTime(Calendar.getInstance());
   
   Transaction ts=session.beginTransaction();
   session.save(gb);
   ts.commit();
   session.close();
  }catch(Exception e)
  {
   System.out.println(e);
  }
 }
 } 
   編譯吧:javac –d . *.java
   執行一下:java org.bromon.zizz.Operate

 到資料庫裡面看看,表格已經建立好了,並且資料也已經儲存。如果把

 new SchemaExport().create(true,true);

 注釋掉,那麼系統不會建立表格,而只是在已有的表格中添加新的記錄,當然,如果表格不存在的話,會產生異常。

 你已經看到了Hibernate神奇魔法的5%,它足夠的複雜強大,可以讓你應付複雜的應用,不過今天還是到此為止吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.