티스토리 뷰
JPA 기초 1
기본적인 객체-테이블 매핑과 동작을 확인한다
데이터베이스는 H2를 사용하였다
연습을 위해 간단한 회원 정보를 담을 MEMBER 테이블을 만든다
테이블에 들어갈 내용과 생성 쿼리문은 아래와 같다
컬럼명 | 데이터 타입 | PK/FK | 내용 |
ID | BIGINT | PK | 회원 고유 넘버 |
NAME | VARCHAR(255) | - | 회원 이름 |
MSG | VARCHAR(255) | - | 회원 한마디 |
create table MEMBER (
id bigint not null,
name varchar(255),
msg varchar(255),
primary key (id)
);
테이블에 대응되는 클래스를 작성한다
@Entity : JPA가 관리할 엔티티 객체임을 선언
@Id : JPA의 객체 식별 기본자이자 테이블의 PK를 지정
@Entity
public class Member {
@Id
private Long id;
private String name;
private String msg;
//Constructor 메소드 생략
//Getter, Setter 메소드 생략
}
테이블에 데이터 저장하기
public class JpaMain {
public static void main(String[] args) {
//persistence 설정 정보를 바탕으로 EntityManage를 생성할 Factory를 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
//엔티티를 관리할 EntityManager를 생성
EntityManager em = emf.createEntityManager();
//트랜잭션을 생성
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
//persist(Object o)메소드로 데이터를 저장
Member kim = new Member(1L, "kim", "안녕하세요");
em.persist(kim);
tx.commit();
}catch(Exception e){
//예외 발생 시 롤백
tx.rollback();
}finally {
//DB 커넥션을 반환한다
em.close();
}
//애플리케이션 종료 전 자원을 반환
emf.close();
}
}
메인 메소드에서 실제 데이터 등록까지 진행되는 과정은 다음과 같다
1. EntityManagerFactory 생성
2. EntityManager 생성
3. EntityTransaction 생성
4. transaction을 통해 EntityManager의 메소드 실행 / 이 때 sql 쿼리문이 자동 생성되어 동작한다
5. transaction에서 커밋 (또는 예외발생 시 롤백)
6. EntityManager close()로 DB 커넥션 반환
7. EntityManagerFactory close()로 자원 반환
스프링 / 스프링부트를 이용하여 실제 웹애플리케이션을 개발할 때는 위 과정이 간편하게 생략된다.
애플리케이션 실행 후 콘솔에 들어가면 테이블에 데이터가 잘 들어간 것을 확인할 수 있다
테이블 데이터 삭제하기
잘못 들어간 cat 데이터를 삭제해보자
try {
//PK인 id 값으로 조회 후 삭제
Member findMember = em.find(Member.class, 4L);
em.remove(findMember);
tx.commit();
}
엔티티매니저를 통해 해당 엔티티 객체를 찾고, remove로 삭제한다
애플리케이션 설정 파일에서 sql 쿼리문을 콘솔창에 출력하도록 했다면,
id 값으로 데이터를 찾아 삭제하는 쿼리문을 JPA가 생성한 것을 볼 수 있다
H2 콘솔창에서 cat의 데이터가 삭제된 것을 확인 가능하다
테이블 데이터 수정하기
park의 이름을 choi로 수정해보자
try {
//PK인 id 값으로 조회 후 setter를 통해 값을 변경
Member findMember = em.find(Member.class, 3L);
findMember.setName("choi");
tx.commit();
}
애플리케이션 실행 시, 데이터가 정상적으로 변경되는 걸 볼 수 있다
이는 트랜잭션이 커밋되기 전에 JPA가 관리하는 엔티티 값 변경을 감지해서 update 쿼리문을 작성해 실행해주기 때문이다
해당 포스트는 김영한 님의 인프런 JPA 강의를 듣고 참조해 복습 및 기록을 위해 작성하였습니다
좋은 강의이니 JPA 입문을 하고자 한다면 꼭 들어보시길 바랍니다
www.inflearn.com/course/ORM-JPA-Basic#
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔
www.inflearn.com
'JPA' 카테고리의 다른 글
PersistentObjectException: detached entity passed to persist 예외 (0) | 2021.05.01 |
---|---|
JPA 영속성 컨텍스트의 그림으로 보는 이해 (0) | 2021.04.23 |