파게로그
[실습] JPA in Maven project 본문
Spring 프레임워크 없이, 기본적인 Maven project에서 JPA를 사용해보자.
pom.xml
<dependencies>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.32.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
</dependencies>
Maven dependencies에 Hibernate를 추가하면, JPA 또한 자동으로 추가된다.
한편 resources 아래에 META-INF라는 디렉터리를 생성하고, persistence.xml에 다음과 같은 내용을 추가한다. 다만 Spring Boot를 사용하면 프레임워크 내부에서 동작하므로 작성할 필요는 없다.
persistence.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.2">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="berry"/>
<property name="javax.persistence.jdbc.password" value="straw"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpa-practice-schema"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
</properties>
</persistence-unit>
</persistence>
entity가 될 클래스를 만들고 다음과 같이 클래스를 작성한다.
package helloJpa.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Member {
@Id
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Id는 PK에 달아주어야 한다. 그리고 JPA는 기본적으로 getter, setter와 constructor를 통해 동작하므로 모두 필요하다(라고 말씀하셨는데 constructor는 생성하지 않았다...)
다음과 같은 코드를 통해 JPA를 느껴본다. 놀랍다...
package helloJpa;
import helloJpa.entity.Member;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class Main {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
// 파라미터는 persistence.xml의 persistence-unit 값으로서 해당 설정을 이용하겠다는 것이다.
// EMF는 서버가 가동될 때 딱 한 번 생성하여 애플리케이션 전체에서 공유해야 한다.
EntityManager em = emf.createEntityManager();
// 실제로는 비즈니스 로직의 요청이 있을 때마다 EntityManager를 생성한다.
// EM은 쓰레드 간에 공유하면 안 된다. 사용한 후 바로 버려야 한다.
EntityTransaction tx = em.getTransaction();
// JPA에서 모든 데이터 변경은 트랜잭션 내에서 실행한다.
tx.begin();
try {
Member member = new Member();
member.setId(100L);
member.setName("스폰지밥");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
// 사실상 어플리케이션의 종료를 의미한다.
}
}
'콤퓨타 왕기초 > JPA' 카테고리의 다른 글
JPA 내부 구조 (0) | 2021.06.02 |
---|---|
연관관계 매핑 (0) | 2021.05.28 |
실습 3 (Mapping annotations) (0) | 2021.05.27 |
[실습] Mapping to DDL (0) | 2021.05.27 |
Why JPA? (0) | 2021.05.26 |
Comments