JPA教程–在Java SE环境中设置JPA
JPA代表Java Persistence API,它基本上是一個規(guī)范,描述了一種將數(shù)據(jù)持久存儲到持久存儲(通常是數(shù)據(jù)庫)中的方法。 我們可以將其視為類似于Hibernate的 ORM工具的東西,除了它是Java EE規(guī)范的正式組成部分(并且Java SE也支持它)。 有很多原因需要學(xué)習(xí)像JPA這樣的ORM工具。 我不會詳細(xì)介紹這個問題,因為網(wǎng)絡(luò)上已經(jīng)有很多帖子可以完美地回答這個問題,例如這個問題或這個問題 。 但是,我們還應(yīng)該記住, 這不是解決所有問題的靈丹妙藥 。
剛開始使用JPA時,我很難設(shè)置它,因為Web上的大多數(shù)文章都是針對Java EE環(huán)境編寫的,而我卻試圖在Java SE環(huán)境中使用它。 我希望本文對將來希望這樣做的人有所幫助。 在此示例中,我們將使用Maven設(shè)置所需的依賴關(guān)系。 由于JPA只是一個規(guī)范,因此我們還需要一個實現(xiàn)。 JPA有許多不錯的免費實現(xiàn)(例如EclipseLink,Hibernate等)。 在本文中,我選擇使用Hibernate。 至于數(shù)據(jù)庫,我將使用MySQL。 讓我們首先創(chuàng)建一個簡單的Maven項目。 我已經(jīng)從命令行使用快速入門原型創(chuàng)建了我的。 如果您不知道該怎么做,可以按照本教程進(jìn)行操作 。 好的,接下來讓我們獲取JPA的依賴項。 在pom.xml中包括以下幾行:
第一個依賴關(guān)系指定標(biāo)準(zhǔn)的JPA接口,第二個依賴關(guān)系指定實現(xiàn)。 以這種方式包含JPA依賴關(guān)系是可取的,因為它使我們將??來可以自由切換特定于供應(yīng)商的實現(xiàn),而不會遇到太大問題( 請參閱此處的詳細(xì)信息 )。 但是,由于API版本1.0.2是作為獨立JAR發(fā)布的最后一個版本,因此我們將無法使用該API的最新版本。 在撰寫本文時,JPA規(guī)范的最新版本是2.1,尚無法獨立獲得(盡管有很多 要求 )。 如果我們現(xiàn)在想使用那個,那么我們唯一的選擇是從特定于供應(yīng)商的JAR中選擇,或者使用提供API及其實現(xiàn)的應(yīng)用服務(wù)器。 我決定使用Hibernate提供的API規(guī)范。 在這種情況下,僅包含以下依賴關(guān)系就足夠了:
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.3.6.Final</version> </dependency>下一步將包括對MySQL的依賴關(guān)系。 在pom.xml中包括以下幾行:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.31</version> </dependency>包括其余依賴項(即jUnit,Hamcrest等)之后,完整的pom.xml如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.keertimaan.javasamples</groupId><artifactId>jpa-example</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>jpa-example</name><url>http://www.codesod.com</url><properties><java.version>1.8</java.version><hibernate.version>4.3.6.Final</hibernate.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- JPA --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version></dependency><!-- For connection pooling --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-c3p0</artifactId><version>${hibernate.version}</version></dependency><!-- Database --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.31</version></dependency><!-- Test --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope><exclusions><exclusion><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-all</artifactId><version>1.3</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.5.1</version><configuration><source>${java.version}</source><target>${java.version}</target><compilerArgument>-Xlint:all</compilerArgument><showWarnings>true</showWarnings><showDeprecation>true</showDeprecation></configuration></plugin></plugins></build> </project>現(xiàn)在是時候配置我們的數(shù)據(jù)庫了。 我將從這本出色的在線書中找到的所有將來的JPA示例中都將使用以下模式:
數(shù)據(jù)庫架構(gòu)
在本地MySQL安裝中,按照上述模式創(chuàng)建一個等效的數(shù)據(jù)庫。 下一步是創(chuàng)建persistence.xml文件,該文件將包含我們的數(shù)據(jù)庫特定信息供JPA使用。 默認(rèn)情況下,JPA希望此文件位于META-INF文件夾下的類路徑中。 對于我們的Maven項目,我在project_root / src / main / resources / META-INF文件夾下創(chuàng)建了此文件:
如果您絕對是JPA的初學(xué)者,則上面的文件需要一些解釋。 在我的下一篇文章中,我將盡可能地解釋它,但是對于運行此示例,您只需要更改前三個屬性值以匹配您的環(huán)境(即數(shù)據(jù)庫名稱,用戶名和密碼)即可。 還要記下persistence-unit元素的name屬性的值。 此值稍后將在代碼中用于實例化EntityManagerFactory實例。
好的,現(xiàn)在讓我們創(chuàng)建一個實體來測試我們的配置。 創(chuàng)建一個具有以下內(nèi)容的名為Address的類:
此類已正確映射到地址表,并且其實例已準(zhǔn)備就緒,可以持久存儲在數(shù)據(jù)庫中。 現(xiàn)在,讓我們創(chuàng)建一個名為PersistenceManager的幫助程序類,其中包含以下內(nèi)容:
import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence;public enum PersistenceManager {INSTANCE;private EntityManagerFactory emFactory;private PersistenceManager() {// "jpa-example" was the value of the name attribute of the// persistence-unit element.emFactory = Persistence.createEntityManagerFactory("jpa-example");}public EntityManager getEntityManager() {return emFactory.createEntityManager();}public void close() {emFactory.close();} }現(xiàn)在讓我們在Main方法中編寫一些示例持久性代碼以測試所有內(nèi)容:
import javax.persistence.EntityManager;public class Main {public static void main(String[] args) {Address address = new Address();address.setCity("Dhaka").setCountry("Bangladesh").setPostcode("1000").setStreet("Poribagh");EntityManager em = PersistenceManager.INSTANCE.getEntityManager();em.getTransaction().begin();em.persist(address);em.getTransaction().commit();em.close();PersistenceManager.INSTANCE.close();} }如果您檢查數(shù)據(jù)庫,將會看到地址表中已插入新記錄。 本文介紹了如何在不使用任何其他框架(如Spring)的情況下設(shè)置JPA。 但是,使用Spring設(shè)置JPA是一個非常好的主意,因為在這種情況下,我們不必?fù)?dān)心管理實體管理器,事務(wù)等。除了設(shè)置JPA之外,Spring 對于許多其他目的也非常有用。 今天就這樣。 在下一篇文章中,我將嘗試解釋persistence.xml文件和相應(yīng)的配置值。 敬請關(guān)注!
- 完整的代碼可以在github上找到。
翻譯自: https://www.javacodegeeks.com/2014/08/jpa-tutorial-setting-up-jpa-in-a-java-se-environment.html
總結(jié)
以上是生活随笔為你收集整理的JPA教程–在Java SE环境中设置JPA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jinfo:JVM运行时配置的命令行浏览
- 下一篇: 奥迪 R8 特别版跑车预告图公布:9 月