** 이 포스팅은 MySQL, SQL 문, JAVA에 대한 기본적인 지식을 가지고 있다고 전제합니다.
이번에는, 앞선 글에서 살펴보았던 JPA를 간단히 사용해 볼 것이다.먼저, spring Initializr을 통해 프로젝트를 생성한다.
사진과 같이 의존성을 추가하고 GENERATE 버튼을 클릭한 후 inteliJ에서 해당 파일을 열어준다.
그런 다음, src/main/resources/application.yml (만약 application.properties로 되어 있다면 properties to YAML Converter을 설치해 yml로 전환하는 것을 추천한다)
로 들어가 jpa 설정을 추가한다.
spring:
application:
name: jpaProject
datasource: //database 설정
driver-class-name: com.mysql.cj.jdbc.Driver
password: 1234
url: jdbc:mysql://localhost:3306/jpaProject
username: abc1234
jpa: //jpa 설정
database: mysql //mysql을 사용할 것이니 database는 mysql로 적어주면 된다.
hibernate:
ddl-auto: update //이 설정은 추후에 자세히 설명하겠다. 일단은 update로 해 두자.
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
format_sql: true
show_sql: true
자, SpringJpa를 사용하려면 여기까지만 설정을 마치면 된다.
그런데 우리는 순수 Jpa를 사용할 것이기 때문에 resource 하위에 META-INF directory를 만들고 persistence.xml 파일을 만들어 다음을 추가한다.
여기서 persistence-unit 의 name은 마음대로 지정해도 된다.
persistence-unit은 영속성 유닛이라는 것이고, 연결 DB 당 하나의 영속성 유닛을 등록한다. 프로그램을 실행하면, META-INF/persistence.xml 패스 경로를 자동으로 읽고, 이 정한 이름을 통해 entityManagerFactory를 생성 할 수 있다. 잘 모르겠으면 여기서는 넘겨도 좋다.
<?xml version="1.0" encoding="utf-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="jpabook">
<properties >
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpaProject"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
<!-- option -->
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
그런 다음 우리가 연습 삼을 table을 간단히 만들어 준다.
create database jpaProject;
create table MEMBER (
ID varchar(255) not null primary key,
USER_NAME varchar (255),
AGE INTEGER
);
그리고 이에 맞게 member class도 간단히 작성한다.
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Member {
private String id;
private String name;
private Integer age;
}
자 그럼 이제 기본적인 준비가 되었다.
@Entity //이 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
@Table(name = "MEMBER") //매핑할 테이블을 지정한다.
@Getter
@Setter
public class Member {
@Id //pk가 될 컬럼에 붙여주어야 한다. 그럼 이 필드는 식별자 필드가 될 것이다.
@Column(name = "ID") //매핑할 컬럼 네임을 지정한다.
private String id;
@Column(name = "USER_NAME")
private String name;
private Integer age; //만약 매핑할 컬럼 네임을 지정하지 않으면, 자동적으로 같은 이름을 가진 컬럼과 매핑이 된다.
}
자 그럼 이제 간단하게 사용 해 볼 것이다.
전체적인 틀은 아래와 같다.
@SpringBootApplication
public class JpaProject {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); //엔티티 메니저 팩토리 생성
EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성
EntityTransaction tx = em.getTransaction(); //트랜잭션 획득
try {
tx.begin(); // 트랜잭션 시작
//비즈니스 로직 작성
tx.commit(); //트랜잭션 커밋
} catch (Exception e) {
tx.rollback(); //트랜잭션 롤백
} finally {
em.close(); //엔티티 메니저 종료
}
emf.close(); // 엔티티 매니저 팩토리 종료
}
}
여기서 이제 회원 객체를 하나 등록하는 간단한 비즈니스 로직을 추가 해 보겠다.
package com.jpa.demo;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class JpaProject {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin(); // 트랜잭션 시작
//비즈니스 로직 작성
Member member = new Member();
member.setId("id");
member.setName("userName");
member.setAge(5);
em.persist(member); //등록
Member findMember = em.find(Member.class, "id"); //조회
System.out.println("findMember : " + findMember.getName());
//비즈니스 로직 끝
tx.commit(); //트랜잭션 커밋
} catch (Exception e) {
tx.rollback(); //트랜잭션 롤백
} finally {
em.close(); //엔티티 메니저 종료
}
emf.close(); // 엔티티 매니저 팩토리 종료
}
}
출력 결과로 userName이 나오고, DB에도 저장된 것을 볼 수가 있을 것이다.
이렇게 간단하게 JPA를 사용해 보았다.
다음 시간에는 영속성에 대해서 알아보겠다.
참조: 자바 ORM 표준 JPA 프로그래밍 - 김영한