superwei

          導航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          十分鐘在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

          主站蜘蛛池模板: 顺昌县| 甘肃省| 广饶县| 赤峰市| 芦山县| 恩施市| 上虞市| 河西区| 哈密市| 桂东县| 错那县| 温州市| 福贡县| 锡林郭勒盟| 屯昌县| 鄯善县| 台南县| 平湖市| 延吉市| 新乡县| 潮安县| 固始县| 东莞市| 绍兴县| 玉屏| 独山县| 吕梁市| 恩施市| 寻乌县| 宜兴市| 彰化县| 龙山县| 淮北市| 巴楚县| 申扎县| 武平县| 湖北省| 车致| 栖霞市| 崇信县| 谷城县|