在此代码段中,您将学习如何创建JPA EntityManagerFactory。该工厂使您能够创建EntityManager用来执行JPA命令来操纵数据库表的。
要创建文件,EntityManagerFactory您需要先创建persistence.xml文件。该文件是您配置JPA的位置。该文件必须放在META-INF程序工作目录的目录中。
这是persistence.xml文件的示例:
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="music" transaction-type="RESOURCE_LOCAL"> <class>org.nhooo.example.jpa.entity.Artist</class> <class>org.nhooo.example.jpa.entity.Genre</class> <class>org.nhooo.example.jpa.entity.Label</class> <class>org.nhooo.example.jpa.entity.Record</class> <class>org.nhooo.example.jpa.entity.Review</class> <class>org.nhooo.example.jpa.entity.Reviewer</class> <class>org.nhooo.example.jpa.entity.Track</class> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/musicdb"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL55Dialect"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create"/> </properties> </persistence-unit> </persistence>
persistence.xml文件中定义的持久性单元包含一组实体对象。我们还定义了一些与数据库连接有关的属性,包括JDBC驱动程序类,JDBC URL,用于打开与数据库的连接的用户名和密码。
定义persistence.xml文件后,我们将创建一个简单的程序来创建EntityManagerFactory。要创建工厂,我们可以使用javax.persistence.PersistenceclasscreateEntityManagerFactory()方法并将持久性单元名称作为参数传递。在此示例中,持久性单元名称music如persistence.xml文件中所示。
创建工厂对象后,我们可以EntityManager通过调用工厂对象来创建createEntityManager()。让我们看看下面的代码片段。
package org.nhooo.example.jpa; import org.nhooo.example.jpa.entity.Artist; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class EntityManagerFactoryExample { public static final String PERSISTENCE_UNIT_NAME = "music"; public static void main(String[] args) { EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); EntityManager manager = factory.createEntityManager(); // 对实体管理器执行一些操作。 Artist artist = manager.find(Artist.class, 1L); System.out.println("artist = " + artist); } }
Artist实体类定义。
package org.nhooo.example.jpa.entity; import javax.persistence.*; import java.io.Serializable; import java.util.Objects; @Entity @Table(name = "artists") public class Artist implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String name; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name = "name", length = 100, nullable = false) public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Artist artist = (Artist) o; return Objects.equals(id, artist.id) && Objects.equals(name, artist.name); } @Override public int hashCode() { return Objects.hash(id, name); } @Override public String toString() { return "Artist{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
我们的项目目录结构。
├── pom.xml └── src └── main ├── java │ └── org │ └── nhooo │ └── example │ └── jpa │ ├── EntityManagerFactoryExample.java │ └── entity │ ├── Artist.java │ ├── Genre.java │ ├── Label.java │ ├── Record.java │ ├── Review.java │ ├── Reviewer.java │ └── Track.java └── resources └── META-INF └── persistence.xml
Maven依赖
<dependencies> <!-- https://search.maven.org/remotecontent?filepath=javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar --> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <!-- https://search.maven.org/remotecontent?filepath=org/hibernate/hibernate-core/5.4.1.Final/hibernate-core-5.4.1.Final.jar --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.1.Final</version> </dependency> <!-- https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> </dependencies>