
김영한 강사님의 '자바 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")과 같이 어노테이션 작성