JPA(Java Persistence API)는 Java EE 5.0에 도입된 ORM 사양입니다. 그 목적은 객체와 관계형 데이터베이스의 매핑을 단순화하고 Java 개발자가 Java 객체를 관계형 데이터베이스에 더 쉽게 유지할 수 있도록 돕는 것입니다. JPA는 데이터 개념을 추상화하여 Java 객체와 관계형 데이터베이스 간의 매핑을 숨깁니다. 개발자는 데이터 저장의 세부 사항에 신경 쓰지 않고 비즈니스 코드 작성에 집중할 수 있습니다.
이 기사에서는 JPA 기술을 사용하여 Java 객체를 MySQL 데이터베이스에 저장하여 저장하는 방법을 소개합니다.
먼저 간단한 학생 수업과 같은 데이터 모델을 정의해야 합니다.
@Entity public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; // 省略构造函数、getter和setter方法 }
위 코드에서는 JPA 주석을 사용하여 엔터티 클래스를 정의합니다. 여기서 @Entity 주석은 이 클래스를 JPA 엔터티 클래스로 표시하는 데 사용되며 @Id 주석은 필드가 기본 키임을 나타내고 @GeneratedValue 주석은 해당 필드가 자동으로 생성된 기본 키임을 나타내며, @Column 주석은 이 필드에 해당하는 데이터베이스 열 정보를 지정하는 데 사용됩니다.
다음으로 프로젝트에서는 JPA에서 제공하는 EntityManager 인스턴스를 사용하여 엔터티 클래스 작업을 수행해야 합니다. JPA를 사용하기 전에 구성 파일에 데이터 소스와 JPA 관련 구성 정보를 지정해야 합니다.
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/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"> <persistence-unit name="myPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.example.Student</class> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="password"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>
위 구성 파일에서는 Hibernate에서 제공하는 구현을 사용하고 데이터 소스 및 JPA 관련 구성 정보를 지정합니다.
그런 다음 Java 코드에서 EntityManager 인스턴스를 통해 엔터티 클래스 작업을 수행합니다.
public class StudentManager { private EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPU"); public void save(Student student) { EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); try { tx.begin(); em.persist(student); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } } public Student getById(Long id) { EntityManager em = emf.createEntityManager(); try { return em.find(Student.class, id); } finally { em.close(); } } public List<Student> getAll() { EntityManager em = emf.createEntityManager(); try { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Student> cq = cb.createQuery(Student.class); Root<Student> rootEntry = cq.from(Student.class); CriteriaQuery<Student> all = cq.select(rootEntry); TypedQuery<Student> allQuery = em.createQuery(all); return allQuery.getResultList(); } finally { em.close(); } } public void update(Student student) { EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); try { tx.begin(); em.merge(student); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } } public void deleteById(Long id) { EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); try { tx.begin(); Student student = em.find(Student.class, id); em.remove(student); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } } }
위 코드에서는 엔터티 클래스 연산을 수행하기 위해 StudentManager 클래스를 생성했는데, 여기서 EntityManagerFactory 인스턴스를 통해 EntityManager 인스턴스가 생성되고, 해당 인스턴스를 연산하여 엔터티 클래스의 C(R)UD 연산이 구현되었습니다.
마지막으로 다음 코드를 통해 코드를 테스트할 수 있습니다.
public static void main(String[] args) { StudentManager studentManager = new StudentManager(); Student s1 = new Student("Tom", 18); studentManager.save(s1); Student s2 = studentManager.getById(1L); System.out.println(s2.getName()); // 输出:Tom List<Student> students = studentManager.getAll(); System.out.println(students.size()); // 输出:1 s2.setName("Jerry"); studentManager.update(s2); s2 = studentManager.getById(1L); System.out.println(s2.getName()); // 输出:Jerry studentManager.deleteById(1L); students = studentManager.getAll(); System.out.println(students.size()); // 输出:0 }
위 코드를 통해 JPA가 Java 객체를 유지할 때 매우 편리하고 사용하기 쉬운 인터페이스를 제공한다는 것을 알 수 있습니다. 개발자는 엔터티 클래스를 정의하고 간단한 주석을 통해 데이터 소스와 JPA 정보를 구성한 다음 Java 객체를 관계형 데이터베이스에 직접 저장하여 저장할 수 있습니다. 이를 통해 개발자에게 필요한 코딩 양이 크게 줄어들고, 개발 효율성이 향상되며, 직접 작성한 SQL 문으로 인해 발생할 수 있는 보안 위험을 방지할 수 있습니다.
위 내용은 JPA 기술을 통해 저장을 위해 Java 객체를 MySQL 데이터베이스에 유지합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!