ppt网站建设,四川华泰建设集团网站,响应式网站介绍,长沙县营销型网站建设选哪家JPA代表Java Persistence API#xff0c;它基本上是一个规范#xff0c;描述了一种将数据持久存储到持久存储#xff08;通常是数据库#xff09;中的方法。 我们可以将其视为类似于Hibernate的 ORM工具的东西#xff0c;除了它是Java EE规范的正式组成部分#xff08;并… JPA代表Java Persistence API它基本上是一个规范描述了一种将数据持久存储到持久存储通常是数据库中的方法。 我们可以将其视为类似于Hibernate的 ORM工具的东西除了它是Java EE规范的正式组成部分并且Java SE也支持它。 有很多原因需要学习像JPA这样的ORM工具。 我不会详细介绍这个问题因为网络上已经有很多帖子可以完美地回答这个问题例如这个问题或这个问题 。 但是我们还应该记住 这不是解决所有问题的灵丹妙药 。 刚开始使用JPA时我很难设置它因为Web上的大多数文章都是针对Java EE环境编写的而我却试图在Java SE环境中使用它。 我希望本文对将来希望这样做的人有所帮助。 在此示例中我们将使用Maven设置所需的依赖关系。 由于JPA只是一个规范因此我们还需要一个实现。 JPA有许多不错的免费实现例如EclipseLinkHibernate等。 在本文中我选择使用Hibernate。 至于数据库我将使用MySQL。 让我们首先创建一个简单的Maven项目。 我已经从命令行使用快速入门原型创建了我的。 如果您不知道该怎么做可以按照本教程进行操作 。 好的接下来让我们获取JPA的依赖项。 在pom.xml中包括以下几行 dependencygroupIdjavax.persistence/groupIdartifactIdpersistence-api/artifactIdversion1.0.2/version
/dependency
dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-entitymanager/artifactIdversion4.3.6.Final/versionexclusionsexclusiongroupIdorg.hibernate.javax.persistence/groupIdartifactIdhibernate-jpa-2.1-api/artifactId/exclusion/exclusions
/dependency 第一个依赖关系指定标准的JPA接口第二个依赖关系指定实现。 以这种方式包含JPA依赖关系是可取的因为它使我们将来可以自由切换特定于供应商的实现而不会遇到太大问题 请参阅此处的详细信息 。 但是由于API版本1.0.2是作为独立JAR发布的最后一个版本因此我们将无法使用该API的最新版本。 在撰写本文时JPA规范的最新版本是2.1尚无法独立获得尽管有很多 要求 。 如果我们现在想使用那个那么我们唯一的选择是从特定于供应商的JAR中选择或者使用提供API及其实现的应用服务器。 我决定使用Hibernate提供的API规范。 在这种情况下仅包含以下依赖关系就足够了 dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-entitymanager/artifactIdversion4.3.6.Final/version
/dependency 下一步将包括对MySQL的依赖关系。 在pom.xml中包括以下几行 dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.31/version
/dependency 包括其余依赖项即jUnitHamcrest等之后完整的pom.xml如下所示 project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.keertimaan.javasamples/groupIdartifactIdjpa-example/artifactIdversion0.0.1-SNAPSHOT/versionpackagingjar/packagingnamejpa-example/nameurlhttp://www.codesod.com/urlpropertiesjava.version1.8/java.versionhibernate.version4.3.6.Final/hibernate.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!-- JPA --dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-entitymanager/artifactIdversion${hibernate.version}/version/dependency!-- For connection pooling --dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-c3p0/artifactIdversion${hibernate.version}/version/dependency!-- Database --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.31/version/dependency!-- Test --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scopeexclusionsexclusiongroupIdorg.hamcrest/groupIdartifactIdhamcrest-core/artifactId/exclusion/exclusions/dependencydependencygroupIdorg.hamcrest/groupIdartifactIdhamcrest-all/artifactIdversion1.3/versionscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion2.5.1/versionconfigurationsource${java.version}/sourcetarget${java.version}/targetcompilerArgument-Xlint:all/compilerArgumentshowWarningstrue/showWarningsshowDeprecationtrue/showDeprecation/configuration/plugin/plugins/build
/project 现在是时候配置我们的数据库了。 我将从这本出色的在线书中找到的所有将来的JPA示例中都将使用以下模式 数据库架构 在本地MySQL安装中按照上述模式创建一个等效的数据库。 下一步是创建persistence.xml文件该文件将包含我们的数据库特定信息供JPA使用。 默认情况下JPA希望此文件位于META-INF文件夹下的类路径中。 对于我们的Maven项目我在project_root / src / main / resources / META-INF文件夹下创建了此文件 persistence xmlnshttp://xmlns.jcp.org/xml/ns/persistence xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/persistencehttp://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsdversion2.1persistence-unit namejpa-example transaction-typeRESOURCE_LOCALproviderorg.hibernate.jpa.HibernatePersistenceProvider/providerpropertiesproperty namejavax.persistence.jdbc.url valuejdbc:mysql://localhost/jpa_example /property namejavax.persistence.jdbc.user valueroot /property namejavax.persistence.jdbc.password valuemy_root_password /property namejavax.persistence.jdbc.driver valuecom.mysql.jdbc.Driver /property namehibernate.show_sql valuetrue /property namehibernate.format_sql valuetrue /property namehibernate.dialect valueorg.hibernate.dialect.MySQL5InnoDBDialect /property namehibernate.hbm2ddl.auto valuevalidate /!-- Configuring Connection Pool --property namehibernate.c3p0.min_size value5 /property namehibernate.c3p0.max_size value20 /property namehibernate.c3p0.timeout value500 /property namehibernate.c3p0.max_statements value50 /property namehibernate.c3p0.idle_test_period value2000 //properties/persistence-unit
/persistence 如果您绝对是JPA的初学者则上面的文件需要一些解释。 在我的下一篇文章中我将尽可能地解释它但是对于运行此示例您只需要更改前三个属性值以匹配您的环境即数据库名称用户名和密码即可。 还要记下persistence-unit元素的name属性的值。 此值稍后将在代码中用于实例化EntityManagerFactory实例。 好的现在让我们创建一个实体来测试我们的配置。 创建一个具有以下内容的名为Address的类 import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;Entity
Table(name address)
public class Address {IdGeneratedValueprivate Integer id;private String street;private String city;private String province;private String country;private String postcode;/*** return the id*/public Integer getId() {return id;}/*** param id the id to set*/public Address setId(Integer id) {this.id id;return this;}/*** return the street*/public String getStreet() {return street;}/*** param street the street to set*/public Address setStreet(String street) {this.street street;return this;}/*** return the city*/public String getCity() {return city;}/*** param city the city to set*/public Address setCity(String city) {this.city city;return this;}/*** return the province*/public String getProvince() {return province;}/*** param province the province to set*/public Address setProvince(String province) {this.province province;return this;}/*** return the country*/public String getCountry() {return country;}/*** param country the country to set*/public Address setCountry(String country) {this.country country;return this;}/*** return the postcode*/public String getPostcode() {return postcode;}/*** param postcode the postcode to set*/public Address setPostcode(String postcode) {this.postcode postcode;return this;}
} 此类已正确映射到地址表并且其实例已准备就绪可以持久存储在数据库中。 现在让我们创建一个名为PersistenceManager的帮助程序类其中包含以下内容 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();}
} 现在让我们在Main方法中编写一些示例持久性代码以测试所有内容 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();}
} 如果您检查数据库将会看到地址表中已插入新记录。 本文介绍了如何在不使用任何其他框架如Spring的情况下设置JPA。 但是使用Spring设置JPA是一个非常好的主意因为在这种情况下我们不必担心管理实体管理器事务等。除了设置JPA之外Spring 对于许多其他目的也非常有用。 今天就这样。 在下一篇文章中我将尝试解释persistence.xml文件和相应的配置值。 敬请关注 完整的代码可以在github上找到。 翻译自: https://www.javacodegeeks.com/2014/08/jpa-tutorial-setting-up-jpa-in-a-java-se-environment.html