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

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

使用EJB 3.0簡化企業級Java開發二

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

  概述
  
  在這個EJB 3.0學習系列中的第二部分,你將學到如何使用POJO開發數據模型,還有如何透明的將那些數據對象模型與關系型數據庫相互映射。使用EJB 3.0中注釋式的實體bean,開發數據庫驅動的應用就是小菜一碟。
  
  請閱讀有關EJB 3.0的整個學習系列:
  
  第一部分:使用注釋開發POJO服務
  
  第二部分:帶來簡便的的持久化技術
  
  在第一部分中,我討論了在企業級javaBean 3.0(EJB)中注釋驅動的POJO編程模型。我闡述了如何開發POJO服務,如何讓容器服務使用POJO, 如何使用依靠注入來組合應用。這些POJO服務主要是用來封裝應用的商業邏輯。在商業邏輯的背后,現今的大多數應用都有由一個高性能的關系型數據庫作為支撐的數據模型層。
  
  在第二部分中,我將討論EJB 3.0實體bean如何利用POJO和注釋的優勢來極大地簡化你的數據模型以及它們與后臺關系數據庫的持久化。在我們進入EJB 3.0實體bean的細節之前,讓我們先來看一下為什么對于企業級Java應用,數據模型和持久化是如此巨大的一個挑戰。
  
  對象-關系映射(ORM)
  
  在Java虛擬機中,所有的數據都被模型化并且封裝在了類和對象的樹結構中。但是在后端的關系型數據庫中,數據被模型化為關系型表,它們通過共享的鍵域(外鍵)相互關聯起來。相同的數據卻有兩個視圖,這對企業級Java的開發者來說是一個艱難的挑戰:當你想從持久化的數據存儲中存取數據時,你必須在對象與關系表達之間往返轉換,這一過程叫做對象-關系映射(ORM)。在Java EE(Java企業版,以前叫做J2EE),你可以通過兩個途徑來實現對象-關系映射。
  
  手動的:你可以使用Java數據庫連接來直接操作持久化-對于簡單應用的直截了當的解決方案。JDBC API的類是緊貼在關系型數據庫表、行和列之后的數據模型。你必須手動地在應用的內部對象模型與JDBC對象模型之間進行轉換,假如你的應用的內部模型本身就類似于2維的關系表的話,那采用JDBC是最佳手段。
  
  自動的:你可以把ORM交給框架??蚣芡ǔO蚰闾峁┮粋€可以和任意數據對象進行交互的API。通過那個API,你可以存儲、獲取和查詢數據庫??蚣茉诤笈_完成了框架對象的轉換。因為特定的關系型SQL查詢不適合對象接口,ORM框架通常定義它自己的查詢語言,并且自動為當前關系型數據庫生成正確的SQL語句。對于擁有復雜的數據模型的應用來說,基于框架的手段能為你節省很多時間并降低了出錯的可能。
  
  對象數據庫
  
  一個對象型數據庫直接在數據庫中存儲、獲取和查找對象。因為不再需要ORM,所以它對于Java應用非常適合。不幸的是,現今的對象型數據庫相對于關系型數據庫來說還不成熟,速度也慢。你可以這樣說,一個好的ORM框架從根本上來說,就是為關系型數據庫提供一個對象型數據庫的接口。兩者它都要做到最好。
  
  這篇文章,我將重點放在專為企業級Java ORM應用設計的自動框架上。下一節,我將提到幾個流行的ORM框架和EJB 3.0中幾個要害的革新。
  
  ORM 框架
  
  EJB 實體bean是Java EE中“官方”的ORM解決方案。但是,在EJB1.x和2.x中,實體bean的難以使用是出了名的,原因如下:
  
  ●EJB 1.x和2.x實體bean必須遵守一種嚴格的組件模型。每一個bean類必須實現一個home接口和一個商業接口。它們必須從某種抽象類中繼續,而且必須實現其所有方法,即使它們多數為空。這樣的一種嚴格組件模型使得想從EJB 1.x和2.x的實體bean中構建面向對象的數據模型幾乎變得不可能了。
  ●EJB 1.x和2.x容器需要非凡冗長的xml配置文件來建立實體bean與關系型數據庫中的表映射。那些文件是非常單調乏味和輕易出錯的。
  
  簡而言之,EJB 1.x和2.x實體bean是一個設計拙劣的ORM框架。它既沒有滿足Java數據對象模型的需求,也沒有滿足關系表數據模型的需求。出于對EJB 1.x和2.x實體bean的不滿,開發者開始尋找其它的ORM方案。實際使用中,開源的Hibernate(JBoss開發)和Oracle公司的TopLink是最成功的兩個POJO ORM框架。Hibernate和TopLink都是基于POJO的。它們不依靠于任何預定義的組件模型。作為替代,它們使用POJO數據對象(簡單的JavaBean式的),自動地解讀出如何映射它們,以及它們之間的關系(關系型數據庫)。通常,JavaBean類映射到一張數據庫表,并根據數據庫表中的外鍵映射出類之間的關系。你可以在一個簡單直接的xml配置文件中指明ORM的配置信息,比如JavaBean類對應的表名和屬性對應的列名。你可以通過框架中的工具(如:Hibernate中的session類)來對那些POJO進行操作(如:存儲、獲取和查找)。
  
  EJB 3.0是建立在Hibernate和TopLink的思想和成功之上。它為Java EE提供了一個標準的POJO ORM框架。另外,EJB 3.0有兩個超越現今所有持久化解決方案的要害革新:
  
  ●沒有使用XML文件來指明ORM配置信息, EJB 3.0答應開發者直接在POJO代碼中注釋出映射信息。舉例來說,你可以用注釋來指明每個JavaBean屬性對應的關系型表列。在這篇文章的后面,你將看到更多的例子。注釋使得映射更直接,更輕易維護了。
  ●EJB 3.0為實體bean定義了一個新的歸檔格式。每個檔案使用一組獨立的,為后端數據庫和ORM行為所專用的配置集來定義一個持久化上下文。在這篇文章的后面,我會討論持久化上下文。
  
  現在,讓我們通過幾個簡單的例子來看一下EJB 3.0是如何完成POJO ORM的。
  
  映射一個簡單的對象
  
  在EJB 3.0中,每個實體bean都是一個簡單的JavaBean式的類。為了告訴EJB 3.0容器這個類應該為持久化進行映射,你應該用@Entity來注釋這個類。
  
  每一個實體bean類映射到一個關系型數據庫表。默認地,表名對應類名。你可以用@Table來為類指定另一個表。每一個JavaBean屬性映射到表的列上,同樣的,默認列名就是屬性名。你可以用@Column注釋在屬性的Setter方法上來改變這種默認關系。下面是一個EJB 3.0的簡單例子:
  
  @Entity// @Table (name="AlternativeTableName")public class Person implements Serializable {  PRotected int id; protected String name; protected Date dateOfBirth;  public void setId (int id) {  this.id = id; }  @Id(generate = GeneratorType.AUTO) public int getId () {  return id; }  public void setName (String name) {  this.name = name; }  // @Column (name="AlternativeColumnName") public String getName () {  return name; }  public void setDateOfBirth (Date dateOfBirth) {  this.dateOfBirth = dateOfBirth; }  public Date getDateOfBirth () {  return dateOfBirth; }}
  
  當容器把Person類映射到Person SQL數據庫表以后,每一個Person實例就是表中的一條數據記錄。
  
  映射一個簡單的JavaBean類是輕易的。但自動ORM框架真正閃光之處在于映射互相關聯的對象。下一節中,我們看一下EJB 3.0如何操作對象間的關系。
  
  關系
  

  在一個數據模型里面,一般來說類相互之間都會有某種聯系。比如,一個Person(個人)對象可以和一個Resume(確認)對象相關聯,反過來也一樣(一對一關系);一個Person對象可以和多個CreditCard(信用卡)對象相關,而一個CreditCard對象只能和一個Person對象相關(一對多關系)。多個Person對象可以和一個Address(地址)對象相關,而一個Person對象只能對應一個Address對象(多對一關系)。(譯者注:此處原著筆誤, Person與Address位置顛倒了;編者注:我看兩者是多對多的關系。一家人住在同一個地方,這個地址對于這一家人來說是一對多的關系;房主在別的地方又買了一套房,房主與地址的關系是一對多的關系。)
  
  在一個數據模型中,對象指針用來操作那些關系。舉例來說,一個Person對象可以有一個屬性(也就是域)指向一個Resume對象。而另一個屬性是CreditCard對象的集合。為了告知EJB 3.0容器對象間的關系,你只需簡單地在POJO中注釋JavaBean屬性。
  
  @Entitypublic class Person implements Serializable { // ... ... protected Resume resume; protected CreditCard [] cards; protected Address addr;  // ... ...   @OneToOne public Resume getResume () {  return resume; }  // ... ...  @ManyToOne // @JoinColumn (name="MyCustomId") public Address getAddr () {  return addr; }  // ... ...  @OneToMany public Collection <CreditCard> getCards () {  return cards; }}
  
  在關系型數據庫中,那些關系自動地被EJB 3.0容器使用外鍵來重建了。舉例來說,Person表有一個外鍵包含了Resume表中相應的主鍵。運行時,EJB 3.0容器加強了一對一的關系:它保證了Resume鍵值對于Person表中的每一行是唯一的。為了啟用Resume表到Person表的雙向查詢,你可以Resume表中定義一個Person屬性,并把它也加上@OneToOne注釋。
  
  Person表中也有一個外鍵包含了Address表中相應行的主鍵。這種情況下,相同的Address主鍵可以出現在多個Person行中,這是多對一關系。對于一對多的關系,映射稍有一點復雜,因為外鍵列是定義在多對一表中的。于是,在CreditCard類中,你必須用@ManyToOne來定義一個Person屬性。
  
  改變外部鍵字段名
  
  ORM中使用的外部鍵字段的名字是由容器自動決定的或者由@JoinColumn注釋來顯式的指定。
  
  上面討論的關系只是實體bean之間關系的一種類型,實體類之間另外一種重要關系是繼續。
  
  繼續
  
  面向對象設計方法的一個要害概念是繼續。使用

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久躁狠狠躁夜夜爽| 久久网福利资源网站| 久久av资源网站| 隔壁老王国产在线精品| 在线日韩欧美视频| 亚洲精品v欧美精品v日韩精品| 欧洲美女免费图片一区| 成人春色激情网| 国产亚洲精品久久| 美日韩在线视频| 亚洲直播在线一区| 亚洲精选中文字幕| 91福利视频网| 永久免费精品影视网站| 成人国内精品久久久久一区| 久久久久久久久久久久久久久久久久av| 久久久人成影片一区二区三区观看| 亚洲成人激情视频| 久久成人免费视频| zzjj国产精品一区二区| 亚洲大胆人体在线| 亚洲一区二区三区xxx视频| 5566成人精品视频免费| 在线中文字幕日韩| 日韩中文字幕免费| 亚洲人成电影在线播放| 国产v综合ⅴ日韩v欧美大片| 亚洲日本中文字幕免费在线不卡| 亚洲成人久久电影| 日韩精品免费在线视频观看| 97免费视频在线播放| 91中文字幕在线观看| 国产va免费精品高清在线观看| 成人www视频在线观看| 国产一区二区视频在线观看| 日韩av在线免费| 91大神福利视频在线| 国产不卡av在线免费观看| 中文字幕亚洲欧美| 久久精品成人欧美大片| 欧美成人精品三级在线观看| 亚洲成人中文字幕| 中文日韩电影网站| 91精品视频播放| 91免费在线视频网站| 色噜噜狠狠狠综合曰曰曰| 95av在线视频| 国产精品国语对白| 日韩免费在线播放| 欧美精品成人在线| 在线视频欧美日韩精品| 欧美另类xxx| 91禁国产网站| 国产精品精品久久久| 日韩欧美精品网站| 国产精品中文久久久久久久| 亚洲xxxx在线| 国产精品黄页免费高清在线观看| 国产精品亚洲精品| 91视频-88av| 欧美孕妇性xx| 亚洲国产婷婷香蕉久久久久久| 综合网中文字幕| 国产欧美一区二区| 国产在线视频2019最新视频| 欧美亚洲午夜视频在线观看| 国产99视频在线观看| 国产精品久久激情| 色综合天天狠天天透天天伊人| 欧美国产激情18| 国产高清在线不卡| 91精品在线观| 日本道色综合久久影院| 国产性猛交xxxx免费看久久| 久久综合伊人77777| 91日韩在线视频| 日韩精品在线观看一区| 国产精品成人aaaaa网站| 成人午夜一级二级三级| 亚洲国产精品美女| 久热精品视频在线观看一区| 国产精品一区久久| 91九色国产视频| 欧美国产第一页| 亚洲最大成人免费视频| 高清欧美性猛交xxxx| 国产999在线| 亚洲精品二三区| 在线看日韩av| 成人字幕网zmw| 欧美综合在线观看| 久久亚洲国产成人| 久久999免费视频| 九九精品在线观看| 精品久久久久久中文字幕| 色爱av美腿丝袜综合粉嫩av| 乱亲女秽乱长久久久| 久久久久久久久久久网站| 亚洲精品国精品久久99热| 久久久电影免费观看完整版| 欧美成人午夜免费视在线看片| 国产91精品不卡视频| 精品国内产的精品视频在线观看| 欧美亚洲国产日韩2020| 久久久成人精品视频| 亚洲欧美在线第一页| 亚洲国产欧美精品| 成人黄色短视频在线观看| 国产亚洲人成网站在线观看| 欧美在线性爱视频| 北条麻妃在线一区二区| 亚洲人午夜色婷婷| 欧美另类精品xxxx孕妇| 国产精品a久久久久久| 国产综合久久久久| 欧美一级黄色网| 亚洲xxx自由成熟| 97免费视频在线播放| 美女啪啪无遮挡免费久久网站| 成人国产在线视频| 国产精品美女午夜av| 在线观看国产成人av片| 色噜噜狠狠狠综合曰曰曰88av| 美女撒尿一区二区三区| 欧美理论在线观看| 2019中文在线观看| 夜夜躁日日躁狠狠久久88av| 欧美成人在线免费视频| 这里只有精品视频| 国产精品成人一区| 51精品在线观看| 欧美华人在线视频| 欧美在线不卡区| 欧美中文字幕在线观看| 久久久久久久久网站| 久久精品免费电影| 欧美日韩国产在线| 日韩欧美主播在线| 亚洲xxxxx电影| 日韩av电影手机在线观看| 久久精品国产96久久久香蕉| 中文字幕在线看视频国产欧美| 日韩国产欧美精品在线| 91精品久久久久久久久久另类| 97国产成人精品视频| 亚洲欧美精品伊人久久| 欧美国产在线电影| 欧美日韩国产成人| 91九色国产在线| 国产精品视频最多的网站| 俺去亚洲欧洲欧美日韩| 九色精品美女在线| 性色av一区二区咪爱| 成人免费观看49www在线观看| 久热精品在线视频| 亚洲激情电影中文字幕| 国产精品亚发布| 国模视频一区二区三区| 日韩中文字幕亚洲| 欧美电影在线观看高清| 亚洲人成在线电影| 亚洲成年人在线播放| 成人免费在线网址| 96精品久久久久中文字幕|