十分鐘在jb(JBuilder)里面運行hibernate的簡單例子
方便門外的學習者,給一個簡單的入門例子。如果你有用過其他持久架構 轉到hibernate其實很簡單。一些原理方面就不講了,
robbin講的肯定比我好的多,自己去精華版看看。
我所給的只是我當初剛開始接觸hibernate時候很想要的一個簡單例子和設置方法。
一直沒有找到,所以現在放到這里給大家看看,(只給想要入門的一個直觀的感應,呵呵)
首先當然要新建一個項目
然后在Project Properties->Paths->Required Libraries->add->new 這里定義hibernate的類庫 把hibernate的lib下面的所有jar包進去 當然還有hibernate2.jar也要
然后一路ok下去就可以了。
再來就是hibernate.properties
從hibernate的src下面找到
把它拷到你項目的src目錄下
(什么,你的項目沒有src目錄,新建一個隨便的類就有src目錄了)
這樣一個JB下面的hibernate的開發環境就好了
然后在hibernate.properties里面設置你的數據庫連接
默認是HypersonicSQL
嗯 接下來的是你最想要做的事情了 其實很簡單
新建一個類Message.java
代碼如下
package hello; import java.io.Serializable; /** * @author getdown * @version 1.0 */ public class Message implements Serializable { private Long id; private String text; //定義一個簡單鏈表 指向另外的一個Message private Message nextMessage; public Message() {} public Message(Long id) { this.id = id; } public Message(String text) { this.text = text; } public Message(Long id, String text) { this.id = id; this.text = text; } public Long getId() { return id; } private void setId(Long id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Message getNextMessage() { return nextMessage; } public void setNextMessage(Message nextMessage) { this.nextMessage = nextMessage; } }
接下來是這個類對應的hibernate的配置文件 Message.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <!--定義類和表的對應--> <class name="hello.Message" table="Messages" > <!--定義ID字段和生成ID的策略 這里采用identity--> <id name="id" column="MESSAGE_ID" > <generator class="identity"/> </id> <!--定義里面的text字段--> <property name="text" type="string"> <!--定義text字段在數據庫里面生成的方法--> <column name="TEXT" length="100" not-null="true" /> </property> <!--定義對象關聯之間的對應關系和關聯的字段--> <many-to-one name="nextMessage" cascade="all" column="NEXT_MESSAGE_ID" /> </class> </hibernate-mapping>
然后就是測試類
package hello; import net.sf.hibernate.cfg.Configuration; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.tool.hbm2ddl.SchemaExport; import net.sf.hibernate.Session; import net.sf.hibernate.Query; import net.sf.hibernate.Hibernate; import net.sf.hibernate.type.LongType; import net.sf.hibernate.Transaction; /** * @author getdown * @version 1.0 */ public class Hello { public Hello() { } public static void main(String[] args) throws Exception { Configuration cfg = new Configuration().addClass(Message.class); /** 顧名思義 構建表。。。第一次運行的時候運行下面語句可以在數據庫生成表 * 之后可以把下面這句去掉 * */ // new SchemaExport(cfg).create(true, true); //先生成sessionFactory SessionFactory sessions = cfg.buildSessionFactory(); //再從sessionFactory得到一個session Session session = sessions.openSession(); //啟動事務 Transaction tx = session.beginTransaction(); //開始對數據庫的操作 /*----對數據庫的創建操作--------*/ Message message = new Message("helloWorld"); //創建一條記錄 session.save(message); //存入記錄 session.flush(); //提交事務 tx.commit(); /*---對數據庫的查詢操作---------------*/ // Message message = new Message(); // Query q = session.createQuery("from Message as message where message.id=1"); // message = (Message) q.list().get(0); // message.getNextMessage().setText("helloNext"); // session.flush(); // session.close(); // Long id = new Long(1); // Message message = (Message) session.find("from Message as message where
message.id=?", id, Hibernate.LONG).get(0); // System.out.println(message.getText()); // /*-------事務的處理----------------*/ // try { // Message message = new Message("hello"); // session.save(message); // session.flush(); // message = new Message("hello"); // session.save(message); // session.flush(); // tx.commit(); // } // catch (HibernateException ex) { // tx.rollback(); // } /*-------添加1000條記錄時間--------------*/ // long start = System.currentTimeMillis(); // for(int i = 0; i < 1000; i ++) { // Message message = new Message("hello"); // session.save(message); // session.flush(); // } // tx.commit(); // long end = System.currentTimeMillis(); // System.out.println("添加1000條記錄時間---" + (end-start)/1000 + "s"); session.close(); } }
ok了 運行一下Hello看看出來什么吧
怎么樣 比起CMP的持久 hibernate的持久是不是顯得很輕量級。。
還可以試試看hibernate的性能 把Hello.java的最后一段注釋去掉運行看看
當然hibernate最重要的還是它的原理,還有很多很好的,很有趣的功能和O/RM設計思想等著你自己發掘。
多看看它自己的文檔,可以學到很多東西,它的文檔真的非常好。
posted on 2005-10-31 11:27 小辭猬 閱讀(336) 評論(0) 編輯 收藏 所屬分類: JAVA