📅  最后修改于: 2023-12-03 15:12:27.890000             🧑  作者: Mango
Java Persistence API (JPA) 是一个 Java 实现 ORM 规范的标准。它为使用对象关系映射 (ORM) 技术的 Java 应用程序提供了一个标准的对象持久化 API。它提供了 Java 应用程序和关系数据库之间的映射,使得 Java 开发人员可以使用 POJO (Plain Old Java Object) 来持久化和检索数据。
要使用 JPA,您需要在项目中添加 JPA 的实现库。例如,您可以使用 Hibernate、EclipseLink 或 OpenJPA 等。这里我们以 Hibernate 为例,介绍如何配置 JPA。
您需要添加以下依赖库:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.17.Final</version>
</dependency>
在项目src/main/resources
目录下创建META-INF/persistence.xml
文件,这是 JPA 的配置文件。添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
version="2.2">
<persistence-unit name="example-persistence-unit"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/example"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
这里的 persistence-unit 中,name 表示此 persistence-unit 的名称,transaction-type 表示事务类型。provider 表示 JPA 实现提供者,这里使用的是 Hibernate。在 properties 中,您需要设置 数据库驱动、URL、用户名和密码、Hibernate 方言和其他 Hibernate 配置。hibernate.show_sql 设置为 true 会在控制台上输出 SQL 语句,方便调试。
在代码中使用 JPA,您需要通过 EntityManagerFactory 获取EntityManager 对象。然后,您可以使用 EntityManager 对象执行对数据库的操作。
public class Main {
public static void main(String[] args) {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-persistence-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();
try {
//执行对数据库的操作
} finally {
entityManager.close();
entityManagerFactory.close();
}
}
}
在使用 JPA 进行开发时,通常需要事先将初始数据写入数据库,或者需要在启动时运行一些初始化脚本。这里介绍使用 Hibernate 的 SchemaExport 工具在启动时自动建表和插入数据。
您需要添加以下依赖库:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.17.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>5.4.17.Final</version>
</dependency>
在src/main/resources
目录下创建data.sql
文件,这是初始化脚本。添加以下内容:
INSERT INTO users (id, name, age) VALUES
(1, 'Alice', 20),
(2, 'Bob', 21),
(3, 'Charlie', 22);
这里的数据表为 users,数据为三条记录。
在src/main/resources
目录下创建hibernate.properties
文件,添加以下内容:
hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
hibernate.hbm2ddl.auto=none
hibernate.show_sql=true
hibernate.jdbc.batch_size=20
hibernate.format_sql=true
hibernate.use_sql_comments=true
hibernate.cache.use_second_level_cache=false
hibernate.cache.use_query_cache=false
hibernate.globally_quoted_identifiers=true
这里设置了 Hibernate 的配置项,重点是 hibernate.hbm2ddl.auto。none 表示不自动建表,create 表示在启动时自动建表,然后插入数据,update 表示检查表是否存在,自动更新表结构。
public class Main {
public static void main(String[] args) {
Configuration configuration = new Configuration().configure();
SchemaExport schemaExport = new SchemaExport(configuration);
schemaExport.create(true, true);
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-persistence-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();
try {
TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User u", User.class);
List<User> users = query.getResultList();
for (User user : users) {
System.out.println(user.getId() + " " + user.getName() + " " + user.getAge());
}
} finally {
entityManager.close();
entityManagerFactory.close();
}
}
}
这里通过 SchemaExport 工具自动建表和插入数据,然后通过 JPA 查询数据。只要启动主函数,就会自动建表和插入数据。
本文介绍了如何配置 JPA 和初始化数据。JPA 是 Java 中 ORM 的重要实现,方便开发人员进行数据库操作。而在开发时,初始化数据也是必不可少的一步,使得程序在启动时更加完整。