📜  配置JPA和初始化的数据(1)

📅  最后修改于: 2023-12-03 15:12:27.890000             🧑  作者: Mango

配置JPA和初始化的数据

JPA简介

Java Persistence API (JPA) 是一个 Java 实现 ORM 规范的标准。它为使用对象关系映射 (ORM) 技术的 Java 应用程序提供了一个标准的对象持久化 API。它提供了 Java 应用程序和关系数据库之间的映射,使得 Java 开发人员可以使用 POJO (Plain Old Java Object) 来持久化和检索数据。

配置JPA

要使用 JPA,您需要在项目中添加 JPA 的实现库。例如,您可以使用 Hibernate、EclipseLink 或 OpenJPA 等。这里我们以 Hibernate 为例,介绍如何配置 JPA。

  1. 添加依赖库

您需要添加以下依赖库:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.17.Final</version>
</dependency>
  1. 配置persistence.xml文件

在项目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 语句,方便调试。

  1. 使用JPA

在代码中使用 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 工具在启动时自动建表和插入数据。

  1. 添加依赖库

您需要添加以下依赖库:

<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>
  1. 编写数据初始化脚本

src/main/resources目录下创建data.sql文件,这是初始化脚本。添加以下内容:

INSERT INTO users (id, name, age) VALUES
(1, 'Alice', 20),
(2, 'Bob', 21),
(3, 'Charlie', 22);

这里的数据表为 users,数据为三条记录。

  1. 添加 Hibernate 配置

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 表示检查表是否存在,自动更新表结构。

  1. 添加启动类
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 的重要实现,方便开发人员进行数据库操作。而在开发时,初始化数据也是必不可少的一步,使得程序在启动时更加完整。