김영한 강사님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의내용을 정리하는 글이다.
pom.xml
: 설정 파일
<dependencies> </dependencies>
안에 필요한 라이브러리 넣으면 된다.org.hibernate
: hibernate-entitymanager 받으면 필요한 파일 땡겨온다.📌 라이브러리 버전 선택하는 방법
(hibernate 기준)
내가 사용하려는 스프링부트 버전의 Reference 문서에 들어가서 org.hibernate
를 검색해서 쭉 내려보면 해당 스프링부트 버전에 맞는 hibernate 버전이 나온다. 이를 선택하면 된다.
persistence.xml
: JPA 설정 파일
<persistence version = 2.2 ~ >
: JPA 버전이 2.2라는 것을 의미한다.<persistence-unit name="hello">
: 데이터베이스 이름은 “hello”로 할 것이다~hibernate.dialect
: 어떠한 DB를 사용한다고 알리는 것. → DB 방언 지정javax.persistence
로 시작 : JPA 표준 속성hibernate
로 시작 : 하이버네이트 전용 속성데이터베이스 방언
persistence.xml
설정 정보를 읽어서 EntityManagerFactory
라는 클래스를 생성한다.Persistence.createEntityManagerFatory()
함수에 persistence.xml
파일에서 설정한 unit-name 인자로 주면서 생성한다.EntityManagerFactory
에서 필요할 때마다 EntityManager
를 생성해서 사용한다.emf.createEntityManager()
: EntityManager 생성EntityManager
사용이 끝나면, 꼭 닫아준다.EntityManagerFactory
는 애플리케이션이 load될 때, 하나만 만들고 하나의 트랜잭션마다 EntityManager
를 생성해서 처리한다.
JPA에서 데이터 변경은 무조건 트랜잭션 안에서 일어나야 된다. 그렇기 때문에, em
을 받는 것으로 끝이 아니라, em.getTransaction()
을 통해 트랜잭션을 얻고, 시작해준 뒤에 데이터 수정을 하면 된다. (끝난 뒤에는 트랜잭션.commit()
을 통해 변경사항 DB에 반영)
작업에 문제가 생긴다면, 트랜잭션을 commit하지 않기 위해서 try-catch문 안에 코드를 작성한다.
JPA CRUD
em.persist(member)
em.find(Member.class, 1L(PK))
em.remove(member)
member.setName("helloJPA")
→ setter로 이름을 바꿔주기만 해도 DB에 적용된다.전체 회원 조회, 이름이 같은 회원 검색 등 조건이 붙은 조회는?
: 가장 단순한 조회 방법인 JPQL을 사용한다
List<Member> result = em.createQuery("select m from Member as m", Member.class)
.getResultList();
일반 쿼리문과는 다르다.
Member
객체(엔티티 객체)를 중심으로 쿼리를 작성한다.pagination
가능하다..setFirstResult()
.setMaxResult()
검색을 할 때, 테이블이 아닌 엔티티 객체를 대상으로 검색하지만 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하기 때문에 애플리케이션에서 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다.
@Entity
꼭 넣기@Id
어노테이션javax.persistence
의 어노테이션 선택USER
이고, 저장하려는 객체의 Class 이름이 Member
로 다르다면 @Table(name = "USER")
와 같이 어노테이션을 작성해준다.@Column(name = "username")
과 같이 어노테이션 작성