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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

初步了解JPA

2019-11-14 14:59:03
字體:
供稿:網(wǎng)友

  想當初07、08年的時候,畢業(yè)之季,正思考著離開學校要去做什么工作。為了有一份薪資不錯,可以長久發(fā)展,也正是自己喜歡的行業(yè)。于是乎決定投身于計算機行業(yè)。當年正是java的火熱時期。到處都是JAVA培訓招生。當時的學習模式基本是學了JAVA SE、web、數(shù)據(jù)庫等基礎(chǔ)課程,就開始學習所謂的JAVA EE部分內(nèi)容。其中很大一部分內(nèi)容就是SSH框架、Struts+SPRing+Hibernate。

  初上手做項目時,連接數(shù)據(jù)庫一般都是用Hibernate框架,雖然當時也知道iBatis(當時也正是由iBatis轉(zhuǎn)化成myBatis時期)。當時使用的數(shù)據(jù)庫多數(shù)是用MySQL,很多的時候也會使用Oracle,市面上還有一大批客戶的服務(wù)器是用的Windows Server,他們用的是SQL Server。于是當年就想,能不能用Hibernate封裝成一個自己的模塊。可以方便的在這幾個常用數(shù)據(jù)庫之間轉(zhuǎn)移。

  其實當時Hibernate并沒有學得太深入。使用也只是淺層次的一些API使用。更不用說去關(guān)注ORM框架的性能,更不用說去對比幾種ORM框架選擇合適的開展自己的項目架構(gòu)。

  后來幾年離開JAVA去做ActionScript 3了,從此不再學習JAVA了。當時如果繼續(xù)從事JAVA,一直學習JAVA,學了Hibernate之外其它的ORM框架。相信肯定也會想封裝一個自己的模塊用來操作數(shù)據(jù)庫。至于基于什么框架,是Hibernate,或者是myBatis,或者別的ORM框架。希望這個模塊也是可以方便嵌入Hibernate或者myBatis,或者別的。應用只要用這個模塊操作數(shù)據(jù)庫。后期哪個ORM框架性能提升了,就可以立即將框架的jar包拷到應用里。這個模塊自然的就變成基于這個ORM框架了。

  這不,好消息來了。JAVA官方做了這事了。就是我們都在關(guān)注的JPA、JPA、JPA(重要的事情說三遍)。

  那么JPA是什么呢?從我前面的描述,相信可以猜到JPA大概是個什么東西。

  再一起去看一下行家是怎么描述的。

  先看Oracle官方Java Persistence API,頁面上有這這樣的一段話:

The Java Persistence API provides a POJO persistence model for object-relational mapping. The Java Persistence API was developed by the EJB 3.0 software expert group as part of JSR 220, but its use is not limited to EJB software components. It can also be used directly by web applications and application clients, and even outside the Java EE platform, for example, in Java SE applications. See JSR 220.

  我把這個翻譯成中文:

  JPA(Java Persistence API)為“對象-關(guān)系”映射(這種需求)提供了一個對象持久化模型方案,是由EJB3.0軟件專家組做為JSR220的一部分開發(fā)的。但是JPA的使用不局限于EJB組件。它(JPA)可以直接由Web應用和客戶端應用使用。甚至在Java EE平臺之外使用,比如在Java SE中使用。詳細請參考JSR 220。

  哦,感覺還沒講得通俗易懂。再看一下百度百科,它是這樣講的:

  JPA全稱Java Persistence API.JPA通過JDK 5.0注解或xml描述對象-關(guān)系表的映射關(guān)系,并將運行期的實體對象持久化到數(shù)據(jù)庫中。

  其實這里主要是描述了兩個功能。一個是怎么標注對象一關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)怎么對應,這里講到可以用JDK5.0的注解,也可以用XML配置文件。還有一個功能就是,對象都已經(jīng)對應到關(guān)系數(shù)據(jù)庫里的數(shù)據(jù)了,自然就是怎么把這些對象存起來。用專業(yè)術(shù)語講就是把對象持久化到數(shù)據(jù)庫中。

  當然JPA完整的功能,在網(wǎng)上一般描述是有三點。除了這里的兩點,還有一點就是怎么樣以對象的角度查詢數(shù)據(jù)。人家很專業(yè),這可是又發(fā)明了一種語言----查詢語言哦,叫做JPQL。關(guān)于這三點功能的描述可以參考百度百科的JPA詞條的起源部分。

  JPA不會太大太重,沒有什么多余的功能。也不會太輕而功能足夠用,一般不會因為使用的JPA而一些功能經(jīng)常沒法滿足。JPA看起來是一個讓人這么爽的東西。但是,JPA是一個虛的東西,它只是官方公布的一套接口規(guī)則,并沒有真正的實現(xiàn)方法。僅僅只是拿著官方的這些API這些空接口,是沒法真正的開發(fā)出應用的。還是要借助一些ORM框架包來完成真正的任務(wù)。那么,這樣是不是太復雜了。用別人的框架,JAVA東家為什么還要來插一腳。要么官方也把JPA實現(xiàn)了,讓用戶只關(guān)注JPA就行。或者專注使用ORM框架,至于要怎么調(diào)用,由ORM框架方說了算。那JPA就失去了意義了,如果是由官方來實現(xiàn)JPA,其實只不過是世界上多了一種ORM框架( 由官方實現(xiàn)的ORM模塊,名叫JPA),或者專注使用ORM框架。那還是以前的年代。并沒有什么進步。

  那么JPA的進步在哪里呢?官方定義了一套API并明確說明了各部分功能,用戶要怎么實現(xiàn)操作數(shù)據(jù)庫,了解JPA規(guī)范就行了。按照JPA的游戲規(guī)則。

  但是這JPA是虛的,怎么變成一個真正有用的東西呢。當然,由原來的ORM廠商來做這事情比較簡單啦。他們在ORM行業(yè)里有積累。只是他們實現(xiàn)JPA功能的時候,也是根據(jù)JPA的游戲規(guī)則來實現(xiàn)。

  如此,官方JPA規(guī)范一出,在操作數(shù)據(jù)庫方面,天下大統(tǒng)一了。用戶使用ORM框架a,或者使用ORM框架b都是同一套路。瞬間世界變得暢通起來了,沒有那么多復雜的東西。

  另外一個問題,目前這空JPA都有哪些公司在實現(xiàn)呢?有Hibernate(具體的講就是Hibernate Entity Manager。大名鼎鼎的Hibernate還通過了JPA的兼容認證,而且負則JPA的老大就是Hibernate的發(fā)明人)、JDO、Spring(Spring怎么也來了?花點時間了解Spring的一些具體功能,Spring很有能力的)、OpenJPA(這是Apaceh的項目,還是要關(guān)注一下的,有空了最好也學習一下怎么使用)、Toplink。

  其次,JPA和EJB又是什么關(guān)系,JPA為EJB有帶來了什么好處呢。相信你關(guān)注了JPA,也愿意去好好關(guān)注一下EJB的。^_^

  


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 渭源县| 墨竹工卡县| 右玉县| 雅安市| 青州市| 峨山| 惠州市| 恭城| 阜新市| 崇阳县| 九龙县| 边坝县| 青海省| 南溪县| 贵港市| 台山市| 临颍县| 大宁县| 锦屏县| 孟津县| 吴江市| 财经| 无棣县| 彭水| 鹿泉市| 万盛区| 互助| 乌审旗| 武山县| 石狮市| 万年县| 田林县| 上栗县| 嘉定区| 夏邑县| 石柱| 谢通门县| 大同县| 阿鲁科尔沁旗| 巴塘县| 宝丰县|