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

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

EJB查詢語言

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

  一、EJB查詢語言
  
  
  EJB 1.1規范沒有為CMP實體Bean(容器治理持久化的實體Bean)的查找器方法提供一種定義查詢的標準,因此,各個EJB容器廠商分別為實體Bean的查找器方法定義了各自的查詢語法。例如,BEA的WebLogic application Server v5.1定義了一種稱為WLQL的查詢語言。
  
  
  由于這個原因,當應用從一個廠商的應用服務器移植到另一個廠商的應用服務器時,開發者必須重新為查找器方法定義查詢。顯然,這限制了帶有CMP實體Bean的應用的可移植性。
  
  
  另外,EJB 1.1規范也沒有為CMP實體Bean在各種不同的代碼上下文、關系或關聯條件下與其它實體Bean的交互提供標準的方法,沒有一種合適的機制可以用來定義那些從一個實體Bean導航到它所依靠的類以及這些類的成員變量的查詢。
  
  
  EJB 2.0規范通過定義EJB查詢語言(EJB Query Language)來解決這些問題。EJB QL以SQL-92規范為基礎,用來為CMP實體Bean定義各種查找器方法和select方法的查詢。EJB QL查詢語句由三個子句構成:SELECT子句,FROM子句,WHERE子句。EJB QL的用途之一是,通過在部署描述器中引入抽象模式類型和關系,它為定義實體Bean以及依靠類之間的關系提供了一種標準化的方法。另外,EJB QL還能夠用抽象模式名字和關系為導航操作定義查詢。
  
  
  下面是EJB QL查詢的基本語法格式:
  
  
  EJB QL查詢 ::= SELECT子句 FROM子句 [WHERE子句]
  
  
  EJB QL查詢必須包含SELECT和FROM子句,但WHERE子句是可選的。FROM子句聲明了基于抽象模式名字的符號變量,SELECT子句利用這些符號變量定義查詢的返回值類型,而WHERE子句則定義了查詢的條件。
  
  
  在部署描述器中,EJB QL查詢用標記定義,如下所示:
  
  
  查找器方法或select方法的名字在元素中指定,參數在元素中指定。元素指定了返回值類型,可以包含本地值或遠程值。查詢字符串在元素中聲明。查找器方法和select方法用EJB QL定義查詢,所以下面我將簡略地介紹一下這兩個概念。EJB 2.0規范定義了實體Bean的查找器方法和select方法,其中select方法是該規范新增的內容。
  
  
  查找器方法(Finder Method):查找器方法通過關系數據庫系統從持久性存儲系統中提取出一個實體Bean的實例,或者一個實體Bean實例的集合。這些方法將在實體Bean的Home接口列出,因此,客戶程序可以看到它們。Home接口既可以是遠程的EJBHome,也可以是本地的EJBLocalHome。在遠程Home接口中,查找器方法的返回類型或者是實體Bean的遠程接口,或者是一個實現實體Bean遠程接口的對象的集合。在本地Home接口中,查找器方法的返回值類型或者是實體Bean的本地接口,或者是一個實現實體Bean本地接口的對象的集合。例如:
  
  
  // 遠程Home接口
  
  public interface OrderHome extends javax.ejb.EJBHome {
  
  ...
  
  public Order findByPRimaryKey(int orderId) throws FinderException,RemoteException;
  
  public Order findByBiggestOrder() throws FinderException,RemoteException;
  
  public java.util.Collection findAllOrders(String supplierName) throws FinderException,RemoteException;
  
  }
  
  // 本地Home接口
  
  public interface OrderHome extends javax.ejb.EJBLocalHome {
  
  ...
  
  public Order findByPrimaryKey(int orderId) throws FinderException;
  
  public Order findBiggestOrder() throws FinderException;
  
  public java.util.Collection findAllOrders(String supplierName) throws FinderException;
  
  }
  
  select方法(Select Method):在實體Bean中,select方法作為一種非凡類型的查尋方法存在。這些方法不在Home接口中聲明,因此客戶程序不能直接訪問它們。對于訪問cmp-field或者在cmr-field中定義的任何遠程接口實例來說,查找器方法不是很有用。利用select方法,實體Bean可返回cmp-field類型的實例,或由cmr-field描述的遠程接口。
  
  
  select方法通常有下面兩種類型:
  
  ejbSelect
  ejbSelectInEntity
  
  
  例如:
  
  public abstract class OrderBean implements javax.ejb.EntityBean {
  
  ...
  
  public abstract java.util.Collection ejbSelectAllOrderedProdUCts(Date date)
  
  throws FinderException;
  
  ...
  
  public abstract java.util.Collection ejbSelectAllOrderedProductsInEntity(Date date)
  
  throws FinderException;
  
  }
  
  
  ejbSelect不關聯到實體Bean的特定實例。因此,在上面的例子中,ejbSelectAllOrderedProducts方法返回一個集合,其中包含與所有訂單關聯的所有產品。ejbSelectInEntity面向特定的實體Bean實例執行,前面例子中的ejbSelectAllOrderProductsInEntity方法返回與該OrderBean實例關聯的所有產品。
  
  我們將以訂單處理應用為例,具體介紹EJB QL查詢的各個子句。圖一顯示了OrderEJB、LineItemEJB、ProductEJB和AddressEJB之間的關系:
  EJB查詢語言
  在部署描述器中,上述關系的定義如下:
  
  
  
  
  
  Order-LineItem
  
  
  order-has-lineitems
  
  One
  
  OrderEJB
  
  
  lineItems
  java.util.Collection
  
  
  
  
  
  lineitem-belongsto-order
  
  Many
  
  
  LineItemEJB
  
  
  order
  
  
  
  
  Product-LineItem
  
  product-has-lineitems
  One
  
  ProductEJB
  
  
  
  lineitem-for-product
  Many
  
  LineItemEJB
  
  
  product
  
  
  二、FROM子句
  
  
  FROM子句通過聲明符號變量,定義了查詢的范圍。符號變量不能在SELECT子句和WHERE子句中聲明,SELECT子句和WHERE子句只能使用FROM子句中定義的符號變量。一個FROM子句中可以定義多個符號變量。
  
  
  任何合法的標識符都可以用作符號變量,但也存在一些限制。例如,符號變量的名字不能與抽象模式名字或EJB名字相同。另外,符號變量名字不應該是保留的符號,保留的符號包括:SELECT,FROM,WHERE,DISTINCT,OBJECT,NULL,TRUE,FALSE,NOT,AND,OR,BETWEEN,LIKE,IN,AS,UNKNOWN,EMPTY,MEMBER,OF以及IS。符號變量的名字是大小寫敏感的。
  
  
  符號變量聲明包括范圍變量聲明和集合成員變量聲明。下面,我們將分析一個簡單的查詢命令,它的FROM子句既包括范圍變量聲明,也包括集合變量聲明。要選擇出所有包含“Floppy Drive”產品的訂單,查詢是:
  
  
  SELECT OBJECT(o) FROM Order o, IN (o.lineItems) li
  
  WHERE li.product.product_type='Floppy Drive'
  
  
  在這個例子中,FROM子句把“o”標識符聲明為一個范圍變量,把標識符“li”聲明為一個集合成員變量。范圍變量聲明了抽象模式類型。聲明集合成員變量要用到:
  
  
  保留符號“IN”,
  
  范圍變量的抽象模式類型,以及
  
  關聯的實體Bean的抽象模式類型。
  
  范圍變量“o”指示了抽象模式類型Order。類似地,符號變量“li”是LineItem抽象模式類型,li.product是Product抽象模式類型。WHERE子句中的li.product.product_type是java.lang.String類型。在EJB QL查詢語言中,所有子句的分析和計算都是從左到右進行,因此,符號變量“li”利用了前面聲明的“o”。在SELECT子句中的OBJECT符號是必須的,因為要用OBJECT操作符來限定和修飾SELECT子句中的所有獨立的符號變量。
  
  
  范圍變量還可以使用可選的符號AS聲明。也就是說,上面例子中的FROM子句也可以改寫成:
  
  
  FROM Order AS o, IN (o.lineItems) li
  
  
  另外,一個FROM子句可以定義一個以上的范圍變量。例如:
  
  
  FROM Order AS o, IN (o.lineItems) li, Product p
  三、WHERE子句
  
  
  WHERE子句定義了選擇結果中的對象或值必須滿足的條件表達式。下面是WHERE子句的語法:
  
  
  WHERE子句 ::= WHERE 條件表達式
  
  
  在EJB QL查詢語言中,WHERE子句中的所有符號變量必需在FROM子句中聲明。查找器方法和select方法的輸入參數也在這里傳入。輸入參數由一個問號(“?”)前綴指示,問號的后面加上方法聲明中參數的序號(例如:?1,?2,等等)。
  
  
  public abstract class OrderBean implements javax.ejb.EntityBean {
  
  ...
  
  //method-a
  
  public abstract java.util.Collection ejbSelectLineItems(int quantity)
  
  throws FinderException;
  
  ...
  
  //method-b
  
  public abstract java.util.Collection ejbSelectAllProducts(String product_type, double

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人av资源网| 青青草原一区二区| 91免费精品视频| 97婷婷涩涩精品一区| 日本亚洲欧洲色| 在线一区二区日韩| 色www亚洲国产张柏芝| 日本免费在线精品| 亚洲国产精品美女| 亚洲人成电影网站| 92看片淫黄大片欧美看国产片| 欧美精品aaa| 国产精品国语对白| 中文字幕精品www乱入免费视频| 亚洲97在线观看| 亚洲片av在线| 亚洲乱码国产乱码精品精| 亚洲国产天堂久久综合网| 日韩中文字幕在线看| 亚洲欧洲xxxx| 青青草成人在线| 亚洲大胆人体视频| 国产精品久久久久久久久男| 亚洲精品av在线| 久久久999国产精品| 欧美黄色小视频| 亚洲第一二三四五区| 亚洲国产欧美久久| 91丨九色丨国产在线| 日韩欧美亚洲范冰冰与中字| 永久免费看mv网站入口亚洲| 亚洲精品综合精品自拍| 日本久久久久久久久久久| 欧美性猛交丰臀xxxxx网站| 成人午夜黄色影院| 91av在线不卡| 欧美亚洲成人免费| 亚洲图片欧美午夜| 中文字幕日韩精品在线观看| 美女999久久久精品视频| 国产精品综合久久久| 国产精品亚洲аv天堂网| 久热在线中文字幕色999舞| 中文字幕亚洲一区二区三区| 91精品久久久久久综合乱菊| 深夜精品寂寞黄网站在线观看| 国产精品你懂得| 国产精品国产自产拍高清av水多| 欧美性高潮床叫视频| 国产精品午夜国产小视频| 欧美激情videoshd| 亚州欧美日韩中文视频| 欧美亚洲国产视频| 国产精品aaa| 日本精品视频在线观看| 欧美大片免费观看在线观看网站推荐| 国产精品夜色7777狼人| 91精品国产高清久久久久久久久| 伊人一区二区三区久久精品| 国产成人福利夜色影视| 日本精品久久久久影院| 在线日韩av观看| 国产香蕉97碰碰久久人人| 国产精品美女www爽爽爽视频| 国产精品久久婷婷六月丁香| 精品动漫一区二区| 国产精品极品在线| 日韩大片免费观看视频播放| 国产福利精品av综合导导航| 欧美亚洲在线观看| 国产欧美最新羞羞视频在线观看| 国产精品旅馆在线| 人九九综合九九宗合| 亚洲免费成人av电影| 国产精品视频26uuu| 国产脚交av在线一区二区| 亚洲欧美国产精品va在线观看| 国产精品美女在线| 国产不卡av在线| 欧美国产日韩xxxxx| 揄拍成人国产精品视频| 国产精品视频一区二区高潮| 国产日韩欧美中文| 精品自拍视频在线观看| 国产视频在线一区二区| 欧美野外wwwxxx| 欧美一级大片在线观看| 久久精品电影网| 91久久久久久久一区二区| 最近2019中文字幕在线高清| 欧美精品久久久久| 久久全球大尺度高清视频| 欧美日韩在线视频观看| 精品国产区一区二区三区在线观看| 亚洲欧美综合精品久久成人| 美日韩丰满少妇在线观看| 97在线日本国产| 亚洲视频一区二区| 国产亚洲免费的视频看| 萌白酱国产一区二区| 欧美成人精品在线播放| 97精品一区二区视频在线观看| 亚洲国产小视频在线观看| 97色在线观看| 国产精品9999| 成人国产亚洲精品a区天堂华泰| 国产亚洲精品日韩| 国产专区精品视频| 亚洲女人天堂视频| 成人欧美一区二区三区在线| 亚洲欧美国产一区二区三区| 国产狼人综合免费视频| 色综合91久久精品中文字幕| 亚洲黄一区二区| 亚州国产精品久久久| 91地址最新发布| 欧美日韩国产一区中文午夜| 在线观看亚洲视频| 91av中文字幕| 成人精品视频99在线观看免费| 国产精品xxxxx| 青青久久av北条麻妃黑人| 欧美激情a在线| 亚洲综合精品伊人久久| 成人网欧美在线视频| 久久成人这里只有精品| 欧美尤物巨大精品爽| 欧美中文在线字幕| 黑人巨大精品欧美一区二区一视频| 国产成人精品视频在线观看| 久久精品国产成人精品| 国产精品成人aaaaa网站| 日韩一区二区欧美| 国产精品一二三在线| 国产精品电影在线观看| 日韩电影中文字幕一区| 国产极品精品在线观看| 91在线视频精品| 国产日产亚洲精品| 亚洲成人精品久久久| 亚洲电影在线观看| 岛国视频午夜一区免费在线观看| 97av在线视频免费播放| 亚洲日本中文字幕| 精品亚洲国产成av人片传媒| 亚洲精品久久久一区二区三区| 久久国产色av| 欧美激情日韩图片| 亚洲一区二区三区四区视频| 成人妇女免费播放久久久| 亚洲精品福利视频| 最新69国产成人精品视频免费| 久99九色视频在线观看| 日韩最新中文字幕电影免费看| 亚洲人高潮女人毛茸茸| 美女久久久久久久久久久| 黑丝美女久久久| 高跟丝袜一区二区三区| 欧美一区在线直播| 亚洲电影天堂av| 日韩视频欧美视频| 国内精品国产三级国产在线专| 欧美日韩国产精品一区二区不卡中文| 亚洲精品视频二区|