JavaMuse

          Hello,World in Hibernate 入門

          本文介紹如何用hibernate寫一個hello world 程序,以及說明Hibernate下的對象的識別。
          1、配置文件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 >

          ????????
          <!-- ?Database?connection?settings? -->
          ????????
          < property?name = " connection.driver_class " > com.mysql.jdbc.Driver </ property >
          ????????
          < property?name = " connection.url " > jdbc:mysql: // localhost:3306/eg</property>
          ???????? < property?name = " connection.username " > root </ property >
          ????????
          < property?name = " connection.password " > 4864452 </ property >

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

          ????????
          <!-- ?SQL?dialect? -->
          ????????
          < property?name = " dialect " > org.hibernate.dialect.MySQLInnoDBDialect </ 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 " > create </ property >
          ?????????
          -->
          ????
          ????????
          < mapping?resource = " eg/Message.hbm.xml " />
          ????????
          ????????
          ????
          </ session - factory >

          </ hibernate - configuration >

          2、源文件:

          package ?eg;

          public ? class ?Message? {
          ????
          private ?Long?id;
          ????
          private ?String?text;
          ?????????????
          ????
          private ?Message?nextMessage;

          ????
          public ?Message()? {}
          ????
          public ?Message(String?text) {
          ????????
          this .text = text;
          ????}

          ????
          ????
          public ? void ?setId(Long?id)? {
          ????????
          this .id? = ?id;?
          ????}


          ????
          public ? void ?setText(String?text)? {
          ????????
          this .text? = ?text;?
          ????}


          ????
          public ? void ?setNextMessage(Message?nextMessage)? {
          ????????
          this .nextMessage? = ?nextMessage;?
          ????}

          ???????
          public ?Long?getId()? {
          ????????
          return ?( this .id);?
          ????}

          ???????
          public ?String?getText()? {
          ????????
          return ?( this .text);?
          ????}

          ???????
          public ?Message?getNextMessage()? {
          ????????
          return ?( this .nextMessage);?
          ????}
          ?
          }

          3、配置文件:Messsage.hbm.xml

          <? xml?version = " 1.0 " ?encoding = " utf-8 " ?>

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

          < hibernate - mapping >
          ????
          < class
          ????????name
          =" eg.Message "
          ????????table
          = " MESSAGE "
          ????
          >

          ????????
          < id
          ????????????name
          = " id "
          ????????????column
          = " MESSAGE_ID "
          ????????????type
          = " java.lang.Long "
          ????????
          >
          ????????????
          < generator? class = " native " />
          ?????????????????????????
          ????????
          </ id >
          ????????
          < property
          ????????????name
          = " text "
          ????????????type
          = " java.lang.String "
          ????????????update
          = " true "
          ????????????insert
          = " true "
          ????????????column
          = " MESSAGE_TEXT "
          ????????
          />

          ????????
          < many - to - one
          ????????????name
          = " nextMessage "
          ????????????
          class = " jmuse.eg.Message "
          ????????????cascade
          = " all "
          ????????????outer
          - join = " auto "
          ????????????update
          = " true "
          ????????????insert
          = " true "
          ????????????column
          = " NEXT_MESSAGE_ID "
          ????????
          />

          ??????
          </ class >

          </ hibernate - mapping >

          4、最后的包結構:

          + lib?
          ?????antlr.jar?
          ?????cglib.jar?
          ?????asm.jar?
          ?????asm
          - attrs.jars?
          ?????commons
          - collections.jar?
          ?????commons
          - logging.jar?
          ?????hibernate3.jar?
          ?????jta.jar?
          ?????dom4j.jar?
          ?????log4j.jar?
          +src?
          ????
          + eg
          ???????Message.java
          ???????Message.hbm.xml
          ???????TestMessage.java
          ?????hibernate.cfg.ml
          ?????log4j.properties

          5、測試:

          ?session.beginTransaction();
          ????????Message?m
          = new ?Message( " hello,world " );
          ????????session.save(m);
          ????????session.getTransaction().commit();
          ????????session.close();

          ?你會發現在數據庫中有一條信息了,id=1
          Hibernate的對象識別是通過對象的Id 來識別的:
          如:

          我們剛才在數據庫中保存了一個Id為1的Message對象。
          如果:
          session.beginTraction();
          Message?m
          = new ?Message();
          m.setId(
          new ?Long( 1 ));
          m.setText(
          " This?is?another?greeting " );
          session.saveOrUpdate(m);
          sesion.getTraction.commit();
          你會發現Hibernate會自動的把剛才的對象進行更新,而不是保存一個新的對象。
          這個例子有點極端,呵呵。能說明問題就可以了。

          posted on 2007-02-10 17:42 滿山紅葉 閱讀(575) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 秭归县| 奈曼旗| 甘肃省| 湖北省| 华容县| 枣庄市| 德格县| 绥中县| 乳山市| 措美县| 岱山县| 湄潭县| 聂荣县| 阿拉善左旗| 汽车| 黔南| 林口县| 抚宁县| 乌兰县| 阿瓦提县| 双辽市| 明星| 江油市| 栖霞市| 富蕴县| 万州区| 漳州市| 吐鲁番市| 嵊泗县| 甘德县| 嘉善县| 女性| 灵璧县| 通海县| 阳城县| 开封市| 凯里市| 岗巴县| 灵寿县| 万安县| 安吉县|