您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Java之jpa的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
JPA快速入門介紹
JPA的英文全稱是Java PersistenceAPI, 目的是給Java開發(fā)者提供對象關(guān)系映射工具用于在
Java應(yīng)用程序開發(fā)中來管理關(guān)系數(shù)據(jù)(RDBMS)。JavaPersistence 包含下面三個部分:
Java持久化API
JPA查詢語言
對象關(guān)系映射元數(shù)據(jù)
當(dāng)前JPA提供廠商有Hibernate, Apache, Eclipse Link等,Google云計算平臺 AppEngine也使
用了JPA作為持久層。JPA作為持久層框架有如下優(yōu)點:
簡單易用,幫助開發(fā)者提供了生產(chǎn)率
便于維護,減低了維護成本
學(xué)習(xí)成本相對比較低。
但是JPA的缺點也是顯而易見,JPA作為持久層有如下缺點:
將語言與數(shù)據(jù)庫混在一起,導(dǎo)致數(shù)據(jù)改動以后,配置文件必須更新
對與多數(shù)據(jù)與大數(shù)據(jù)量處理很容易產(chǎn)生性能問題。
過度封裝,導(dǎo)致錯誤查找相對與JDBC等傳統(tǒng)開發(fā)技術(shù)而言更加困難
JPA的最新規(guī)范為JSR Java PersistenceAPI Version 2.0
Entity Class – 實體類,必須使用注解@entity標(biāo)明,同時必須有一個無參數(shù)的構(gòu)造函數(shù),而
且無參數(shù)構(gòu)造函數(shù)必須為public或者protected,如果一個entity class被標(biāo)記為final將導(dǎo)致
出錯。
EntityManager – 實體管理者,管理Entity實例的整個生命周期,而且使用Query API來查詢
實體與他們的persist狀態(tài)。
Query Language – 基于字符串的查詢語句,用來查詢實體(Entity)與他們的狀態(tài)。
MetaModel API – 通過EntityManagerFactory或者EntityManager的getMetamodel()方法獲取,
查看persistence-unit的信息。
實體管理者與持久化上下文(Entity Manager and Persistence contexts)
Persistence Contexts – 一個被管理的實體的實例集合,在一個持久化上下文中的所有實例都
由Entity Manager來管理它們整個生命周期。
持久化單元(Persistence-Unit) – 一個持久化單元是個邏輯分組包括以下部分:
一個實體管理者工廠及它的實體管理者
被管理的class集合,在persistence unit配置文件中定義
映射元數(shù)據(jù)– 注解定義或者xml定義匹配的類
ORM元數(shù)據(jù)(MetaData forObject/Relational Mapping) – 坦白的說就annotation的各種解釋與使用。
詳細了解請閱讀Oracle官方文檔 - 《persistence-2_0-final-spec》PDF文檔。
四:JPA簡單實例說明
1. 使用ObjectDB作為數(shù)據(jù)庫,關(guān)于ObjectDB請參考http://www.objectdb.com/
2. 參考了objectDB的例子,代碼幾乎沒有改動,文檔說明參見這里:
http://www.objectdb.com/tutorial/jpa/eclipse/web
3. 一個可運行的JPA實例源代碼:
entity class:
package com.gloomyfish.jpa.tutorial; import java.io.Serializable; import javax.persistence.*; @Entity public class Point implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private long id; private int x; private int y; public Point() { } Point(int x, int y) { this.x = x; this.y = y; } public Long getId() { return id; } public int getX() { return x; } public int getY() { return y; } @Override public String toString() { return String.format("(%d, %d)", this.x, this.y); } }
Main Test JPA;
package com.gloomyfish.jpa.tutorial; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import javax.persistence.TypedQuery; public class JPAMain { public static void main(String[] args) { // Open a database connection // (create a new database if it doesn't exist yet): EntityManagerFactory emf = Persistence.createEntityManagerFactory("$objectdb/db/points.odb"); EntityManager em = emf.createEntityManager(); // Store 1000 Point objects in the database: long startTime = System.currentTimeMillis(); em.getTransaction().begin(); for (int i = 0; i < 10; i++) { Point p = new Point(i, i); em.persist(p); } em.getTransaction().commit(); long endTime = System.currentTimeMillis(); System.out.println("save time = " + (endTime - startTime)); // Find the number of Point objects in the database: Query q1 = em.createQuery("SELECT COUNT(p) FROM Point p"); System.out.println("Total Points: " + q1.getSingleResult()); // Find the average X value: Query q2 = em.createQuery("SELECT AVG(p.x) FROM Point p"); System.out.println("Average X: " + q2.getSingleResult()); // Retrieve all the Point objects from the database: TypedQuery<Point> query = em.createQuery("SELECT p FROM Point p", Point.class); List<Point> results = query.getResultList(); for (Point p : results) { System.out.println(p); } // Close the database connection: em.close(); emf.close(); } }
感謝各位的閱讀!關(guān)于“Java之jpa的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。