💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편에 대해 공부하고, 정리한 내용입니다.
1. 프로젝트 생성
1) IntelliJ IDEA에서 프로젝트 생성
- - IntelliJ IDEA를 실행한 후, [파일] > [새로 만들기] > [새 프로젝트] 메뉴를 선택하여 새 프로젝트를 생성합니다.
- - 프로젝트 생성 시, 프로젝트 SDK와 빌드 도구(Maven 또는 Gradle)를 선택합니다.
- - Maven 프로젝트를 사용하는 경우 pom.xml 파일을 통해 종속성을 관리합니다.
- - Gradle 프로젝트를 사용하는 경우 build.gradle 파일을 통해 종속성을 관리합니다.
2. 종속성 설정
1) Hibernate 라이브러리 추가
- JPA를 사용하기 위해 Hibernate 라이브러리를 추가합니다.
(1) Maven 프로젝트
- pom.xml 파일에 다음과 같은 종속성을 추가합니다:
org.hibernate
hibernate-entitymanager
5.6.14.Final
(2) Gradle 프로젝트
- build.gradle 파일에 다음과 같은 종속성을 추가합니다:
dependencies {
implementation 'org.hibernate:hibernate-entitymanager:5.6.14.Final'
}
3. Persistence.xml 설정
1) JPA 설정 파일 생성
- JPA의 설정 정보를 담는 META-INF/persistence.xml 파일을 생성합니다. 이 파일에는 데이터베이스 연결 정보와 JPA 관련 설정이 포함됩니다.
- 예를 들어, H2 데이터베이스를 사용하는 경우 다음과 같이 설정할 수 있습니다:
2) 주요 설정 항목
- - javax.persistence.jdbc.driver: JDBC 드라이버 클래스명.
- - javax.persistence.jdbc.url: 데이터베이스 연결 URL.
- - hibernate.dialect: Hibernate가 사용할 데이터베이스 방언(Dialect).
- - hibernate.show_sql: 실행되는 SQL을 콘솔에 출력할지 여부.
4. 객체 매핑 설정
1) 데이터베이스 및 테이블 생성
- JPA 엔티티와 매핑될 데이터베이스와 테이블을 생성합니다. 예를 들어, JPA_TEST라는 데이터베이스와 MEMBER 테이블을 다음과 같이 생성합니다:
CREATE DATABASE JPA_TEST;
CREATE TABLE MEMBER (
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
AGE INT,
PRIMARY KEY (ID)
);
2) 회원 클래스 생성
- Member 클래스를 생성하고 JPA 엔티티로 매핑합니다. 클래스에 JPA 어노테이션을 사용하여 데이터베이스 테이블과 필드를 매핑합니다:
@Entity
@Table(name="MEMBER")
public class Member {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String username;
private Integer age;
// Getters and Setters
}
3) 주요 어노테이션
- - @Entity: 이 클래스를 JPA 엔티티로 지정합니다.
- - @Table: 엔티티가 매핑될 테이블 이름을 지정합니다. 생략 시 클래스 이름이 테이블 이름으로 사용됩니다.
- - @Id: 엔티티의 기본 키를 나타냅니다.
- - @Column: 엔티티 필드와 데이터베이스 컬럼을 매핑합니다. 생략 시 필드명이 컬럼명으로 사용됩니다.
5. JPA 시작하기
1) JPA 설정 및 비즈니스 로직 구현
- Main 클래스를 통해 JPA 설정과 트랜잭션 관리를 수행합니다. EntityManagerFactory와 EntityManager를 생성하고 트랜잭션을 관리하는 예시 코드:
public class Main {
public static void main(String[] args) {
// 엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hellojpa");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin(); // 트랜잭션 시작
logic(em); // 비즈니스 로직 실행
tx.commit(); // 트랜잭션 커밋
} catch (Exception e) {
tx.rollback(); // 예외 발생 시 트랜잭션 롤백
} finally {
em.close(); // 엔티티 매니저 종료
}
emf.close(); // 엔티티 매니저 팩토리 종료
}
private static void logic(EntityManager em) {
String id = "user123";
Member member = new Member();
member.setId(id);
member.setUsername("John Doe");
member.setAge(25);
// 등록
em.persist(member);
// 수정
member.setAge(30);
// 한 건 조회
Member findMember = em.find(Member.class, id);
System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());
// 목록 조회
List members = em.createQuery("select m from Member m", Member.class).getResultList();
System.out.println("members.size=" + members.size());
// 삭제
em.remove(member);
}
}
2) 주요 코드 구조
- - 엔티티 매니저 설정: EntityManagerFactory 생성 후 EntityManager 생성.
- - 트랜잭션 관리: 트랜잭션 시작, 커밋, 롤백 처리.
- - 비즈니스 로직: 회원 엔티티 등록, 수정, 삭제, 조회.
6. JPQL 사용
1) JPQL(Java Persistence Query Language)
- JPQL은 객체 지향 쿼리 언어로, 엔티티 객체를 대상으로 쿼리를 실행합니다.
(1) JPQL 예시
TypedQuery query = em.createQuery("select m from Member m", Member.class);
List members = query.getResultList();
(2) JPQL과 SQL의 차이점
- - JPQL: 엔티티 객체를 대상으로 쿼리 (예: select m from Member m).
- - SQL: 데이터베이스 테이블을 대상으로 쿼리 (예: SELECT * FROM MEMBER).
- JPA는 JPQL을 분석하여 적절한 SQL을 생성하고, 이를 데이터베이스에 전달하여 실행합니다.
'Spring > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
06. 다양한 연관관계 매핑 (1) | 2024.09.08 |
---|---|
05. 연관관계 매핑 기초 (0) | 2024.09.08 |
04. 엔티티 매핑 (1) | 2024.09.08 |
03. 영속성 관리 - 내부 동작 방식 (0) | 2024.08.11 |
01. JPA 소개 (0) | 2024.07.24 |