JPA入门指南:从零开始构建Java持久化应用

171 阅读3分钟

简介

Java Persistence API(JPA)是Java EE 5规范中的一部分,它提供了一种标准的方式来管理Java对象与关系数据库之间的映射。JPA的出现使得Java开发人员可以更加方便地进行持久化操作,而不必关心底层的数据库操作细节。

本文将介绍如何使用JPA来构建一个简单的Java持久化应用程序。

环境准备

在开始之前,需要确保已经安装了以下软件:

  • JDK 1.8或更高版本
  • Eclipse IDE
  • MySQL数据库

同时,还需要下载并导入以下JAR包:

  • javax.persistence-api-2.2.jar
  • hibernate-core-5.4.10.Final.jar
  • mysql-connector-java-8.0.19.jar

创建数据库

首先,需要创建一个名为“jpa_demo”的数据库。可以使用MySQL Workbench或者命令行工具来创建。

CREATE DATABASE jpa_demo;

创建实体类

在Java中,实体类是指与数据库表相对应的Java类。在JPA中,实体类必须满足以下要求:

  • 必须有一个无参构造函数
  • 必须有一个唯一标识符(ID)属性
  • 必须使用@Entity注解进行标注

在本例中,我们将创建一个名为“User”的实体类,它对应着数据库中的“user”表。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    // getters and setters
}

在上面的代码中,@Id注解表示该属性是实体类的唯一标识符,@GeneratedValue注解表示该属性的值是自动生成的。

创建数据访问对象(DAO)

数据访问对象(DAO)是用于访问数据库的对象。在JPA中,可以使用EntityManager来进行数据库操作。

public class UserDao {
    private EntityManager entityManager;

    public UserDao() {
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa_demo");
        entityManager = entityManagerFactory.createEntityManager();
    }

    public void save(User user) {
        entityManager.getTransaction().begin();
        entityManager.persist(user);
        entityManager.getTransaction().commit();
    }

    public User findById(Long id) {
        return entityManager.find(User.class, id);
    }

    public List<User> findAll() {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
        Root<User> root = criteriaQuery.from(User.class);
        criteriaQuery.select(root);
        TypedQuery<User> typedQuery = entityManager.createQuery(criteriaQuery);
        return typedQuery.getResultList();
    }
}

在上面的代码中,我们使用EntityManagerFactory来创建EntityManager对象。在save方法中,我们使用EntityManager的persist方法来将实体类保存到数据库中。在findById方法中,我们使用EntityManager的find方法来根据ID查找实体类。在findAll方法中,我们使用Criteria API来查询所有的实体类。

测试代码

现在,我们已经创建了实体类和数据访问对象,可以编写测试代码来验证它们的正确性。

public class App {
    public static void main(String[] args) {
        UserDao userDao = new UserDao();

        User user1 = new User();
        user1.setName("张三");
        user1.setAge(20);
        user1.setEmail("zhangsan@example.com");
        userDao.save(user1);

        User user2 = new User();
        user2.setName("李四");
        user2.setAge(25);
        user2.setEmail("lisi@example.com");
        userDao.save(user2);

        User user3 = userDao.findById(1L);
        System.out.println(user3.getName());

        List<User> userList = userDao.findAll();
        for (User user : userList) {
            System.out.println(user.getName());
        }
    }
}

在上面的代码中,我们创建了两个User对象,并将它们保存到数据库中。然后,我们根据ID查找了一个User对象,并输出了它的名字。最后,我们查询了所有的User对象,并输出了它们的名字。

总结

本文介绍了如何使用JPA来构建一个简单的Java持久化应用程序。首先,我们创建了一个名为“User”的实体类,它对应着数据库中的“user”表。然后,我们创建了一个数据访问对象(DAO),它用于访问数据库。最后,我们编写了测试代码来验证它们的正确性。