亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

來龍去脈 JDO技術分析及企業應用研究

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

  JDO(java Data Object)是JCP中較早開發出來并形成規范的JSR12,該規范對數據的持久化存儲進行了一系列規范,并已有眾多的商業產品和開源項目是基于該規范。作為一種需要引起重視的技術,研究并探討其企業應用可行性是十分重要的。
  
  前言
  
  在企業級的應用開發中,常需要有良好的持久化技術來支持數據存儲。通過良好的規范或API,將企業的領域業務對象進行持久化存儲,大多采用O/R映射技術來進行模式化的數據轉換及自動映射工作。
  
  JDO(Java Data Object)是JCP中較早開發出來并形成規范的JSR12,該規范對數據的持久化存儲進行了一系列規范,并已有眾多的商業產品和開源項目是基于該規范。作為一種需要引起重視的技術,研究并探討其企業應用可行性是十分重要的。
  
  以下主要對JDO(JDO 1.0規范)的應用開發技術作扼要介紹,通過該文,可以由淺入深、并較為全面地了解JDO,把握主要的技術細節及過程,理解其運行機制,并對企業級應用有個總體的把握,這將有助于企業應用軟件的技術選型、體系架構及分析設計活動。
  
  該文適合企業應用架構師、及關心數據持久層設計開發人員。
  
  JDO基本思想及特點
  
  企業信息系統的一個重要問題是解決數據的存儲,即持久化。在軟件開發過程中,分析員分析領域業務,提取出領域業務模型,并對應設計出數據庫中需要進行存儲業務數據的數據庫表及相應字段。
  
  并根據業務流程,設計業務處理邏輯單元,進行數據的加工、處理及存儲、查詢等業務。其中一個較為繁煩、枯燥的工作,就是處理大量的數據持久化代碼。為了解決數據從業務對象層向數據存儲層之間的轉換工作,JDO提供了相應的開發規范及API,解決了由Java對象直接存儲為數據庫相應表的底層處理過程,有助于設計人員更加專注于面向業務流程、面向業務對象等較高層次的應用。
  
  由于采用JDO的映射機制,能降低了業務系統與數據存儲系統的耦合,使得業務系統相對于關系數據庫或對象型數據庫,具有可移植性,同時,由于采用面向對象(而非傳統的面向記錄)的持久化技術,系統更為輕便、簡潔,增強了可維護性。
  
  JDO應用示例及分析
  
  以下將通過一些示例,由淺及深地講解JDO技術。
  
  臨時對象與持久對象
  
  這是一個普通的業務對象的代碼。
  
  package business.model;
  public class Book {
  PRivate String isbn;
  private String name;
  private Date publishDate;
  public void setISBN(String isbn){
  this.isbn = isbn;
  }
  public String getISBN(){
  return this.isbn;
  }
  public void setName(String name){
  this.name = name;
  }
  public String getName(){
  return this.name;
  }
  public void setPublishDate(Date pubDate){
  this.publishDate = pubDate;
  }
  public Date getPublishDate(){
  return this.publishDate;
  }
  }
  
  現在將它作為一個JDO中對象保存到數據庫中。代碼如下:
  
  Book book = new Book();
  book.setISBN(“isbn-1234567”);
  book.setName(“Java設計模式”);
  
  PersistenceManager manager = persistenceManagerFactory.getPersistenceManager();
  manager.currentTransaction().begin();
  manager.makePersistence(book);
  manager.currentTransaction().commit();
  
  Book類的實例book對JDO的API而言,就是一個持久對象。類Book是可持久類。那任何一個普通java類都是JDO的可持久類嗎?不是的。只有具備以下的條件,一個對象才可以被JDO持久到數據庫中。
  
  它所屬類應標記為可持久的類,有以下兩種方法:
  
  顯式:實現接口,javax.jdo.PersistenceCapable即可;
  
  隱式:以Sun的JDO參考實現為例,Book.java類的相同路徑下還須有Book.jdo文件。
  
  <?XML version=“1.0” encoding = “UTF-8”?>
  <!DOCTYPE jdo SYSTEM “jdo.dtd”>
  <jdo>
  <package name = “business.model”>
  <class name = “Book”/>
  </package>
  </jdo>
  
  并通過字節碼增強工具(本例采用Sun的字節碼增強工具)處理,
  
  javac Book.java
  java com.sun.jdori.enhancer.Main Book.class Book.jdo。
  
  通過上述兩種方法,獲得的Book.class才是一個可持久的類。
  
  字節碼增強的有如下功能:當應用程序通過set方法修改某個字段1時,由于通過增強過程,在其內部插入了某些代碼,JDO會獲得數據狀態變化的信息,從而在持久過程中,進行有選擇性的處理。
  
  按照JDO規范,增強后的類可以在不同的JDO實現上使用,而無需重新編譯或增強。
  
  并不是所有Book對象都是持久對象,只有當makePersistence后,該對象才是持久對象,并會通過JDO實現存儲到數據庫中。通過JDO的供給商擴展標記符(vendor-extension),可具體描述Book類的存儲特性,如為該可持久類指定數據庫表和對應字段。
  
  持久對象查詢
  
  JDO查詢主要有以下兩種方式。
  
  使用Extend查詢
  
  Extend可以查詢指定類及子類的持久對象。
  
  PersistenceManager manager = persistenceManagerFactory.getPersistenceManager();
  manager.currentTransaction().begin();
  Extend extend = manager.getExtend(Book.class,true);//true表明同時查詢子類
  Iterator it = extend.iterator();
  while(it.hasNext()){
  Book book = (Book)it.next();
  System.out.println(book.getISBN());
  }
  extend.closeAll();
  manager.currentTransaction().commit();
  
  Extend查詢方法,提供了一種基于類的查詢途徑,它可以與下面的Query構成更為強大的查詢。
  
  使用Query查詢
  
  Query可以指定過濾條件,是一種常用的查詢方式。
  
  下例是查找條件為“書名以‘Java設計模式’開頭且出版日期小于今天”的書籍。
  
  String filter = “((String)name).startsWith(/”Java設計模式/”) && publishDate < today”;
  Query query = pm.getQuery(Book.class,filter);
  query.declareImports(“import java.util.Date”);
  query.declareParameters(“Date today);
  
  Date today = new Date();
  results = (Collection)query.execute(today);//傳入參數值today
  if (results.isEmpty()){
  System.out.println(“No data!”);
  }else{
  Iterator it = results.iterator();
  while(it.hasNext()){
  Book book = (Book)it.next();
  System.out.println(“Book Name:” + book.getName() + “, ISBN:” + book.getISBN());
  }
  }
  
  注:該條件使用了一個變元‘today’,通過“declareParameters”來聲明該變量,并在“execute”方法中傳入該變量的實例。
  
  這種帶參數的查詢,很類似于我們以前采用JDBC的帶?的查詢方式。
  
  其中startsWith(String s)是JDO提供的標準字符方法,類似的方法還有endsWith(String s)。
  
  JDOQL:上述使用的就是一個JDOQL樣例,JDOQL是JDO規范一個組成部分。使用JDOQL可以使用應用在不同的JDO實現上運行。為了解決JDOQL的某些不足,JDO規范提供了支持特定JDO供給商查詢語句接口。
  
  查詢排序
  
  下例是將查詢結果按“出版日期降序、書名升序”進行排序。
  
  Query query = pm.newQuery(Book.class, filter);
  
  String orderStr = “publishDate decending, name ascending”;
  query.setOrdering(orderStr);
  
  results = query.execute(today);
  
  對象更新
  
  當客戶端對業務數據進行了更新后,需要通過業務過程將其更新到持久層中。
  
  這有兩個過程,首先根據主鍵找到該實例,接著更新字段及提交。
  
  如下例,將指定書目編號的書本的出版日期進行更改。
  
  public void updateBookPublishDate(String isbn, Date newDate){
  PersistenceManager pm = null;
  try{
  pm = pmf.getPersistenceManager();
  Object obj = pm.newObjectIdInstance(Book.class,isbn);
  Book book = (Book)pm.getObjectById(obj,true);
  book.setPublishDate(newDate);
  }catch(Exception e){
  xxxContext.setRollbackOnly();
  throw new Exception(e);
  }finally{
  try{
  if (pm != null && !pm.isClosed()){
  pm.close();
  }
  }catch(Exception ex){
  System.out.println(ex);
  }
  }
  
  注,在PersistenceManager使用newObjectIdInstance()方法時,JDO是如何知道通過書目編號ISBN來找到該對象呢?
  
  其實在本可持久類Book的jdo描述文件中,還需提供如下信息:
  
  <?xml version=“1.0” encoding = “UTF-8”?>
  <!DOCTYPE jdo SYSTEM “jdo.dtd”>
  <jdo>
  <package name = “business.model”>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女视频免费在线观看| 91国产精品电影| 国产日韩换脸av一区在线观看| 日韩在线激情视频| 海角国产乱辈乱精品视频| 成人欧美一区二区三区黑人| 国产精品69精品一区二区三区| 欧美大片大片在线播放| 国产精品99久久久久久人| 精品亚洲aⅴ在线观看| 91久久久久久久久| 亚洲国产日韩欧美在线图片| 日韩欧美成人区| 91免费观看网站| 国产性猛交xxxx免费看久久| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品啪视频| 日韩av在线免费播放| 久久精品亚洲国产| 国内精品久久久久久| 黄色一区二区三区| 97国产在线观看| 欧美成人精品不卡视频在线观看| 久久精品视频亚洲| 不卡在线观看电视剧完整版| 97视频国产在线| 亚洲精品999| 久久久精品视频成人| 91av免费观看91av精品在线| 国产伊人精品在线| 一区二区三区精品99久久| 日韩免费不卡av| 日韩美女在线观看| 亚洲精品动漫100p| 久久精品国产亚洲精品2020| 亚洲天堂男人天堂| 亚洲女同精品视频| 日韩美女激情视频| 91美女高潮出水| 亚洲综合在线小说| 欧美黑人一区二区三区| 国产91色在线播放| 日韩美女毛茸茸| 97碰在线观看| 韩国19禁主播vip福利视频| 国产一区二区三区在线免费观看| 国语自产精品视频在线看一大j8| 欧美自拍大量在线观看| 一本色道久久88精品综合| 久青草国产97香蕉在线视频| 亚洲国产精品视频在线观看| 奇门遁甲1982国语版免费观看高清| 日韩欧美精品在线观看| 国产精品一区二区3区| 日韩精品免费综合视频在线播放| 蜜月aⅴ免费一区二区三区| 日韩精品中文在线观看| 亚洲视频国产视频| 亚洲欧美自拍一区| 91av视频在线观看| 欧美精品成人在线| 久久精品国产亚洲精品2020| 成人黄色短视频在线观看| 日韩高清中文字幕| 97久久国产精品| 亚洲欧洲xxxx| 欧美在线一区二区三区四| 亚洲精品久久久一区二区三区| 国产精品久久二区| 国产欧美亚洲视频| 亚洲欧洲自拍偷拍| 奇米4444一区二区三区| 国产精品久久久久久久天堂| 亚洲一区二区免费在线| 欧美麻豆久久久久久中文| 欧美激情久久久| 日韩欧美在线视频| 免费不卡在线观看av| 国内外成人免费激情在线视频| 一区二区成人av| 欧美综合在线第二页| 日韩av手机在线看| 欧美激情亚洲国产| 欧美在线观看视频| 精品福利在线观看| 亚洲午夜小视频| xxav国产精品美女主播| 亚洲人成网站999久久久综合| 成人免费视频97| 在线观看中文字幕亚洲| 青草成人免费视频| 亚洲国产高清自拍| 国产视频欧美视频| 国产精品91久久| 亚洲天堂免费在线| 国产精品久久二区| 日本欧美爱爱爱| 久久久久久久一| 久久人91精品久久久久久不卡| 久久青草福利网站| 久久最新资源网| 欧美日韩激情视频| 亚洲精品在线看| 日本成人精品在线| 日本亚洲欧美三级| 国产成人av在线播放| 亚洲精品一区二区久| 国产一区二区三区毛片| 97精品在线观看| 亚洲精品一区二区在线| 一本色道久久88综合亚洲精品ⅰ| 伊是香蕉大人久久| 亚洲精品国产综合久久| 亚洲第一页自拍| 欧美精品免费在线| 91精品国产沙发| 狠狠色狠狠色综合日日小说| 国产激情综合五月久久| 日韩欧美中文免费| 成人久久久久爱| 国产成人亚洲综合91精品| 最新国产精品亚洲| 亚洲一二在线观看| 一区二区欧美激情| 成人羞羞国产免费| 国产精品99一区| 欧美精品www在线观看| 日韩av片免费在线观看| 亚洲经典中文字幕| 亚洲欧美日韩天堂一区二区| 亚洲欧美日韩在线高清直播| 中文字幕精品在线| 狠狠色香婷婷久久亚洲精品| 午夜精品视频网站| 国产精品第七影院| 国产亚洲视频在线观看| 中文字幕在线看视频国产欧美| 日韩国产欧美精品在线| 国产主播欧美精品| 97av在线视频免费播放| 麻豆成人在线看| 欧美最猛性xxxxx免费| 亚洲天堂开心观看| 国产精品综合久久久| 亚洲影院高清在线| 主播福利视频一区| 国外色69视频在线观看| 日韩久久免费视频| 日韩经典中文字幕在线观看| 亚洲色图欧美制服丝袜另类第一页| 97超级碰碰人国产在线观看| 亚洲激情电影中文字幕| 精品国产自在精品国产浪潮| 欧美大片大片在线播放| 日韩精品视频在线观看网址| 欧美美女操人视频| 欧美性xxxx极品高清hd直播| 欧美高清在线观看| 亚洲男人天堂古典| 亚洲精品美女久久| 96sao精品视频在线观看| 色偷偷888欧美精品久久久| 欧美在线视频导航| 中文字幕日韩av综合精品|