熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts處方:Hibernate與Struts

2022-06-13   來源: Java開源技術 

  持久層是一個應用系統最基本的部份很顯然的如果沒有持久層所有的工作都將丟失但是對不同的人來說持久層意味著不同的東西持久化時間的長短是選擇持久層儲存媒介的基本衡量標准之一例如對於生命周期為一個用戶會話的數據來說Http session是非常合適的與之對應的跨越多個session或者多個用戶的持久化則需要一個數據庫來保持數據的數量是另一個非常重要的衡量標准例如最佳實踐表明大量的數據最好不要被存儲在一個Http會話中在這些情況下你都應該考慮使用數據庫在這篇文章中我們的目標就是數據庫持久層
  
  你選擇的數據庫類型對你有架構與設計都有重要的影響作為面向對象的開發人員我們傾向於把數據描繪成描述手上商業問題的一組相互關聯的對象—這常被稱為域模型 但是最常用的存儲媒介是基於關系模型的除非我們的對象模型映射成一個關系結構否則內存中我們數據的表示就會與持久化它的方法不一致這個問題也被稱作不對稱問題最流行的解決這種不對稱問題的是一組被稱為對象關系映射工具一個ORM工具是被用來把數據從對象視圖轉換為關系型提供諸如創建更新刪除(CRUD)等持久性服務的軟件有許多的關於ORM工具的論文但是從本質上來說他們談論的都是對象映射模式最流行的ORM工具是開源的Hibernate工程
  
  在這篇文章中我們展示了如何在一個Struts項目中應用Hibernate另外我們將展示如何建立一個Struts插件來提升你系統的性能
  
  處方
  
  在這個文摘中我們使用一個例子來展示你在struts項目中使用hibernate時所需要的所有東西我們將建立一個應用程序來獲取和展示從化學元素周期表裡取出的元素這個應用程
  
  序提供給用戶一個查找頁來通過元素符號來查找元素應用程序將查詢數據庫裡匹配這個元素符號名的記錄並返回查找到的元素信息來響應用戶請求
  
  首先我們將展示如何啟動Hypersonic服務器當數據庫服務器啟動後我們建立示例程序所需要的表與數據一旦數據庫准備運行了我們將建立使用Hypersonic數據庫服務器所需的Hibernate的所有東西接下來的步驟是在action裡調用Hibernate來處理數據庫讀取來響應查詢請求因為建立Hibernate的Factory對象是非常耗資源的我們建立一個Struts plugin來建立factory並把它保存在context裡
  
  讓我們從建立Hypersonic數據庫服務器開始你需要從下載它放置hsqldbjar在你的classpath路徑裡從Dos窗口中敲入以下命令來啟動Hypersonic:
  
  java orghsqldbServer
  
  雖然不同版本的Hypersonic的服務器響應不同下面的應答是典型的Hypersonic已經准備好響應數據庫請求的應答
  
  Server is running
  Press [Ctrl]+{c} to abort
  
  隨著數據庫服務器的啟動我們可以建表和填充數據如下列表所示
  
  Listing 建立元素表
  
  create table elements (id integer() IDENTITY
  name char()
  number char()
  mass char()
  symbol char());
  CREATE UNIQUE INDEX ui_elements_pk ON elements (symbol)insert into elements ( name number mass symbol) values (ManganeseMn);insert into elements ( name number mass symbol) values (ZincZn);insert into elements ( name number mass symbol) values (ThuliumTm);insert into elements ( name number mass symbol) values (CaliforniumCf);insert into elements ( name number mass symbol) values (GoldAu);insert into elements ( name number mass symbol) values (YtterbiumYb);insert into elements ( name number mass symbol) values (MolybdenumMo);insert into elements ( name number mass symbol) values (PalladiumPd);
  
  列表是建立表的SQL語句在symbol列上建立唯一索引插入上面那些化學周期元素當然你也可以從你高校的化學書本裡面找出更多的一些數據插入
  
  列表是用來存儲從數據庫取出數據的JavaBean對象
  
  Listing JavaBean元素
  
  package comstrutsrecipeshibernatebeans;public class Element {
  private String name;
  private String symbol;
  private String number;
  private String mass;
  private int id;
  public Element() {   super();
  }  public Element(String name String symbol String number String mass) {
  thisname = name;
  thissymbol = symbol;
  thisnumber = number;
  thismass = mass;
  }  public int getId() {   return id;
  }  public void setId(int id) {   thisid = id;
  }  public String getMass() {   return mass;
  }  public String getName() {   return name;
  }  public String getNumber() {   return number;
  }  public String getSymbol() {   return symbol;
  }  public void setMass(String mass) {   thismass = mass;
  }  public void setName(String name) {   thisname = name;
  }  public void setNumber(String number) {   thisnumber = number;
  }  public void setSymbol(String symbol) {   thissymbol = symbol;
  }}
  
  Hibernate是一個對象關系映射工具它的任務是映射對象到關系型表反之亦然所以我們必須告訴Hibernate如何映射列到JavaBean的屬性上這個是通過Elementhbmxml文件來完成的這份文件裡面包含的信息用來授予Hibernate從表裡面拷貝數據到Elements JavaBean的權利如果我們使用Hibernate來更新數據Elementhbmxml文件裡的信息將被用來解析從Elements JavaBean來的數據來生成更新的SQL語句列表顯示了Elementhbmxml
  
  Listing Elementhbmxml
  
  <?xml version=?><!DOCTYPE hibernatemapping PUBLIC //Hibernate/Hibernate Mapping DTD//EN  mappingdtd><hibernatemapping>
  <class name=comstrutsrecipeshibernatebeansElement table=elements>
  <id name=id column=id>
  <generator class=native/>
  </id>
  <property name=name column=name/>
  <property name=number column=number/>
  <property name=mass column=mass/>
  <property name=symbol column=symbol/>
  </class></hibernatemapping>
  
  讓我們跳到列表
  
  我們聲明了與elements表相聯系的類文件的完整的包名然後我們聲明了表的名字與這個類相關聯接下來我們聲明從JavaBean的id屬性到表的id列的映射因為property和column屬性都有相同的值我們本來可以忽略column屬性但是為了清晰起見我們還是把column列出來 <id>是個特殊的標簽它被用來聲明表的主鍵閉合的標簽<generator>表示Hibernate以最適合數據庫實現的方式生成該主鍵你可以參考Hibernate文檔有關標簽<id>的更多信息最後我們為其它的JavaBean屬性做聲明為了清晰起見column屬性再次被聲明
  
  一旦映射文件被詳細的分析那一切都非常的明晰了它簡單地聲明了表與類的映射和JavaBean屬性與表的列名的映射接下來我將告訴你在哪裡放置這個文件
  
  接下來我們通過聲明環境信息來配置Hibernate在列表我們展示Hibernatecfgxml文件
  
  Listing hibernatecfgxml
  
  <?xml version= encoding=utf?><!DOCTYPE hibernateconfiguration PUBLIC //Hibernate/Hibernate Configuration DTD//EN  configurationdtd><hibernateconfiguration>
  <sessionfactory>
  <property name=dialect>netsfhibernatedialectHSQLDialect</property>
  <property name=connectiondriver_class>orghsqldbjdbcDriver</property>
  <property name=connectionusername>sa</property>  <property name=connectionpassword></property>  <property name=connectionurl>jdbc:hsqldb:hsql://</property>
  <property name=show_sql> </property>  <property name=>true</property>
  <mapping resource=/com/strutscookbook/hibernate/beans/Elementhbmxml/></sessionfactory></hibernateconfiguration>
  
  讓我們跳到列表
  
  我們以指定數據庫實現方言開始允許Hibernate充分利用實現特殊化的屬性我們聲明Hypersonic方言我們可以參考Hibernate文檔以選擇數據庫相應的方言然後我們聲明數據庫驅動必須保證這個驅動在應用程序的classpath上然後我們聲明數據庫的用戶名數據庫密碼連接數據庫的URL接下來我們通知Hibernate在日志裡顯示運行時生成的SQL語句
  
  Hibernatecfgxml文件必須被放在你的classpath裡
  
  在你的程序裡使用hibernate必須有下面幾
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28503.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.