Java如何在JPA中将实体持久存储到数据库?

在此示例中,您将学习如何使用JPA将实体对象持久化或保存到数据库表中。我们将创建一个用于持久存储Artist实体的数据访问对象(DAO)。

我们创建一个ArtistDaoImpl带有接受EntityManager参数的构造函数的类。我们在此DAO中提供了几种方法,例如save()和getArtist()方法。这些方法用于保留实体并从数据库中检索实体的集合。

为了将对象持久保存到数据库中,我们调用EntityManager.persist()带有要保存为参数的实体对象的方法。在调用该persist()方法之前和之后,我们还必须开始并提交事务。这是我们的DAO及其实现的代码。

package org.nhooo.example.jpa.dao;

import org.nhooo.example.jpa.entity.Artist;

import java.util.List;

public interface ArtistDao {
    Artist findById(Long id);

    void save(Artist artist);

    List<Artist> getArtists();
}
package org.nhooo.example.jpa.dao.impl;

import org.nhooo.example.jpa.dao.ArtistDao;
import org.nhooo.example.jpa.entity.Artist;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;

public class ArtistDaoImpl implements ArtistDao {
    private EntityManager manager;

    public ArtistDaoImpl(EntityManager manager) {
        this.manager = manager;
    }

    @Override
    public Artist findById(Long id) {
        return manager.find(Artist.class, id);
    }

    @Override
    public void save(Artist artist) {
        manager.getTransaction().begin();
        manager.persist(artist);
        manager.getTransaction().commit();
    }

    @Override
    @SuppressWarnings(value = "unchecked")
    public List<Artist> getArtists() {
        Query query = manager.createQuery("select a from Artist a", Artist.class);
        return query.getResultList();
    }
}

为了演示DAO,我们创建了一个简单的程序,如下所示。该程序首先创建EntityManagerFactory由persistence.xml文件中定义的持久性单元配置的配置。从工厂开始,我们创建EntityManager对象,该对象将传递给ArtistDaoImpl。

创建的实例后,ArtistDao我们通过调用dao.save()方法将一些艺术家记录插入数据库。为了检查数据是否成功存储在数据库中,我们调用dao.getArtists()来从数据库中读回数据并将其打印到屏幕上。

package org.nhooo.example.jpa;

import org.nhooo.example.jpa.dao.ArtistDao;
import org.nhooo.example.jpa.dao.impl.ArtistDaoImpl;
import org.nhooo.example.jpa.entity.Artist;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.List;

public class EntityPersistDemo {
    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();

        String[] artistNames = {"Bryan Adams", "Mr. Big", "Metallica"};

        ArtistDao dao = new ArtistDaoImpl(manager);

        for (String name : artistNames) {
            Artist artist = new Artist();
            artist.setName(name);
            dao.save(artist);
        }

        List<Artist> artistList = dao.getArtists();
        for (Artist artist : artistList) {
            System.out.println("artist = " + artist);
        }
    }
}

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>

Maven中央
Maven中央
Maven中央