国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

追求“簡約不簡單”的ORM映射框架

2019-11-18 15:29:08
字體:
來源:轉載
供稿:網友

  “簡約不簡單”,男人味十足的陳道明的出色的演繹給我們作了非常好的詮釋。“簡約”也就是要化繁為簡、直接明了, 也就是將生活上和設計上多余的東西撇掉,點到即止。“不簡單”就是只指“簡約”的背后是一些復雜的設計及功能實現。“簡約不簡單”,是一種兼容并蓄的思想,廣泛來說就是記貼近生活、合乎人性,才是設計的最終目的。

  說起持久層框架或方案,最先想到的肯定是Entity Bean,受過Entity Bean折磨的朋友都知道,其非常的不簡單的同時,也非常的不簡約。不管是CMP還是BMP的Entity Bean,曾經讓J2EE用來作顯耀資本的Entity Bean今天回過頭去看就像一個怪胎,甚至會有一種讓人哭笑不得的感覺。EBJ3.0中推出的JPA,終結了“輕量與重量持久之爭”的同時,也宣判了Entity Bean的死刑,基于Entity Bean造價昂貴的系統也成了遺留系統。
  輕量級持久化解決方案設想的萌芽、成形、廣泛應用到最終到打敗Entity Bean的這一過程,給我們揭示了很多現代科學技術發展的客觀規律,我認為其中一個規律可以概括為:“簡約而不簡單”。通過最簡約的表達手段達到最好的表達效果一直是各個不同領域的創造者的目的,軟件也不例外同,因此“簡約主義(英文:minimalism)”應該是我們軟件設計的基本思想之一

  相對于Entity Bean,輕量級持久化方案顯得就“簡約”了許多。不依靠于任何框架的純POJO,即方便領域建模,也方便單元測試,更方便移植、維護及擴展。然而,在JDK1.5以前,面對輕量級ORM中的那一堆繁雜的配置文件,如何有效治理卻是讓人非常頭痛;盡管一些ORM系統通過引入Jakarta Commons Attributes或類似的思想來實現源碼級標簽聲明持久層對象映射,零亂的標簽定義仍然無法從根本上改善映射屬性配置信息治理維護的復雜性。

  JDK1.5以后,注解(Annotation)的引入為我們提供了一種非常好的源碼級配置處理方式。因此,在各種項目中得到了非常好的引用,使得持久層的方案更加簡約。非凡是JPA,可算是“簡約”持久層的一個里程碑。因此,現在再來像SPRing的Rod Johnson大叔前兩年那樣再來談怎么滅掉EJB,難免會有點滑稽可笑。

  Hibernate3.2已經實現了JPA,還有很多的持久層ORM框架也將會實現JPA,因此您假如使用這些框架仍然可以在升級版本中享受其一定的簡約。然而“簡約”是無盡頭的,永遠無法輕易達到一種完美的境界,JPA也是如此。

  這里使用EasyDBO框架,舉一個簡單的例子,來演示“簡約”追求的過程。
  可以不需要使用配置文件,直接使用java注解標簽,通過下面的方式定義持久層對象:

 @Table(tableName  =   " OrderInfo " )
 public   class  Order  implements  Serializable   {
 @TableField(name  =   " id " )
  private  Number id; // 主鍵id 
 
 @TableField(name  =   " sn " )
  private  String sn; //  定單編號 
 
 @TableField(name  =   " vdate " )
  private  Date vdate; // 定單日期 
 
 @TableField(name  =   " requireDate " )
  private  Date requireDate; // 交付日期 
 
 @TableField(name  =   " payType " )
  private  String payType; // 支付方式 
 
 @TableField(name  =   " linkMan " )
  private  String linkMan; // 聯系人 
 
 @TableField(name  =   " tel " )
  private  String tel; // 電話 
 
 @TableField(name  =   " address " )
  private  String address; // 地址 
 
 @TableField(name  =   " requirement " )
  private  String requirement; // 需求描述 
 
 @TableField(name  =   " remark " )
  private  String remark; // 備注 
 
 @TableField(name  =   " amount " )
  private  BigDecimal amount; // 訂單總金額 
 
 @TableField(name  =   " handPerson " )
  private  String handPerson; // 經手人 
 
 @TableField(name  =   " inputUser " )
  private  String inputUser; // 錄入人 
 
 @TableField(name  =   " inputTime " )
  private  Date inputTime; // 錄入時間 
 
 @TableField(name  =   " opUser " )
  private  String opUser; // 操作人 
 
 @TableField(name  =   " opIntro " )
  private  String opIntro; // 操作簡介 
 
 @TableField(name  =   " opTime " )
  private  Date opTime; // 操作時間 
 
 @TableField(name  =   " status " )
  private  Integer status; // 訂單狀態 
 
 @TableField(name  =   " payment " )
  private  Integer payment; // 支付狀態 
 
 @OneToOne(column  =   " customer_id " , type  =  Customer. class )
  private  Customer customer; // 一對一關聯,定單對應的客戶 
 
 @ManyToOne(column  =   " order_id " , type  =  OrderDetail. class )
  private  Set < OrderDetail >  children  =   new  HashSet < OrderDetail > (); // 一對多關聯,定單下面的具體信息 
 
   public  Number getId()   {
   return  id;
 } 
 
   public   void  setId(Number id)   {
   this .id  =  id;
 } 
 
   public  String getAddress()   {
   return  address;
 } 
…省略后面普通的getter及setter

 



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浦北县| 望江县| 东宁县| 华亭县| 义乌市| 和林格尔县| 瓮安县| 嘉兴市| 都江堰市| 福鼎市| 长寿区| 巨野县| 湘潭市| 加查县| 巫溪县| 河北区| 澄江县| 南宫市| 霸州市| 乳山市| 铁力市| 兴文县| 大同市| 鄂尔多斯市| 郯城县| 稻城县| 武陟县| 达孜县| 靖边县| 行唐县| 贵州省| 新蔡县| 内乡县| 河东区| 若羌县| 旬阳县| 广安市| 桑植县| 贺兰县| 太原市| 旬阳县|