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

關於OJB和Hibernate框架的評議

2013-11-23 20:39:37  來源: Java開源技術 

  OJB和Hibernate是我用過兩個O/R Mapping框架附帶說一句我用OJB比Hibernate的時間長多了因此對Hibernate的了解不深因此有一些看法可能會有誤
  
  備注: OJB網址
  
  OJB和Hibernate的機制基本上是樣沒有多的區別包括代理約束引用等 都可以使用類SQL語句OJB用OQLHibernate用HQL也可以設置查詢類
  
  不過 我兩者在一個很大的設計的區別
  
  就是說數據填充上的設計
  
  如
  
  class User
  {
  private String name;
  
  public void setName(String r_Name)
  {
  name=r_Name;
  }
  
  public String getName()
  {
  return name;
  }
  }
  
  OJB用下列描述符
  
  OJB的引擎將數據庫填充到對象時是使用Reflection來設置name這個字段有些象username=
  
  將對象中的數據保存到數據庫時也是這樣
  
  Hiberate用下列描述符
  
  Hibernate的引擎將數據庫填充到對象時是使用Reflection來設置name這個屬性即調用usersetName();
  
  將對象中的數據保存到數據庫時調用usergetName();
  
  (我一向把Property看作帶操作的field)
  
  想來 設計者分別采用這種方式應該有各自的理由但我個人還是比較喜歡OJB的方式
  
  原因如下
  
  實體類應該只代表數據庫通過field就可以使用Property進行訪問只是避免以後可能的改動或者實體類不是單純的實體類可以帶些簡單的業務模型意義裡面因此用field可能會更好一些
  
  比如說 用OJB的話類可能象這樣getState返回String給用戶查看凍結帳戶新注冊用戶
  
  class User
  {
  private String name;
  private int state;
  
  public void setName(String r_Name)
  {
  name=r_Name;
  }
  
  public String getName()
  {
  return name;
  }
  
  public void setState(int r_State)
  {
  state=r_State;
  }
  
  public String getState()
  {
  if()
  return ;
  else
  return
  }
  }
  
  用Hibernate的類象這樣
  
  class User
  {
  private String name;
  private int state;
  
  public void setName(String r_Name)
  {
  name=r_Name;
  }
  
  public String getName()
  {
  return name;
  }
  
  public void setState(int r_State)
  {
  state=r_State;
  }
  
  public void getState()
  {
  return state;
  }
  
  public String getStateString()
  {
  if()
  return ;
  else
  return
  }
  }
  
  我總是覺得OJB的看起來更順眼一些
  
  當然我不是說Hibernate不好
  
  不過在一般的中小型程序中很少有純粹的實體類多多少少都帶了一點業務或者因為其它原因如上面的原因OJB可能會有點優秀
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28845.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.