[JPA] JPA 설정하기, JPQL 정리

devguri·2022년 10월 5일
0
post-thumbnail
post-custom-banner

Spring 없이 JPA를 설정하여 프로젝트를 실습해볼 것이다.
내부적으로 어떻게 돌아가는지 안 후에 spring을 사용하면 자동적으로 처리되는 것에 대한 이해가 더 커질 것이기에 진행하였다.

프로젝트 생성하기

  1. h2 데이터베이스 다운 후 생성
  2. 프로젝트 생성 (메이븐으로)
  3. 라이브러리 추가
  4. JPA 설정

Intellij에서 프로젝트 생성

Hibernate ORM 버전은 스프링에서 맞는 버전 찾기

spring → projects → spring boot에서 dependencies 확인

현재 hibernate가 5.6.11로 다운 받으면 됨

다운받은 h2와 같은 버전으로 dependencies 설정하기

데이터베이스 방언 중요!

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

  • jpa는 특정 데이터베이스에 종속x
    • oracle 쓰다가 mysql로 바꿔도 잘바뀌어야함
  • jpa는 현재 표준에 맞지 않는 데이터베이스에 대해 알아서 번역해서 사용해줌
  • 방언 : SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

Hello JPA - 애플리케이션 개발

JPA 구동 방식

  1. persistence 클래스에서 시작
  2. 설정정보 persistence.xml 파일 읽어옴
  3. 그 설정 정보는 EntityManagerFactory 클래스 만들어줌
  4. 필요할때마다 EntityManager 만듬
  • 어떤 테이블에 저장하라고 안했는데 ORM이 자동으로 매핑해줌

회원 조회

Member findMember = em.find(Member.class, 1L);
System.out.println("findMember.Id() = " + findMember.getId());
System.out.println("findMember.Name() = " + findMember.getName());
  • id 정보 찾고 출력해주기

회원 삭제

Member findMember = em.find(Member.class, 1L);
em.remove(findMember);

회원 수정

Member findMember = em.find(Member.class, 1L);
findMember.setName("HelloJPA");

-> 수정된거 볼 수 있음

주의

  • 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
  • 엔티티 매니저는 고객 요청올때마다 썼다가 버림, 쓰레드간에 공유X (사용하고 버려야 한다).
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행

JPQL

List<Member> result = em.createQuery("select m from Member as m", Member.class)
                    .getResultList();
 for (Member member : result) {
        System.out.println("member.getName() = " + member.getName());

결과

[페이지 네이션 하기]

List<Member> result = em.createQuery("select m from Member as m", Member.class)
                    .setFirstResult(5)
										.setMaxResults(8);
										.getResultList();

→ 5번쨰부터 8번쨰까지 가져옴

→ DB에 맞게 변형해줌

JPQL 정리

  • JPQL → 객체 지향 SQL
  • JPA 사용하면 엔티티 객체 중심으로 개발하게됨
  • 검색 쿼리를 위해 JPQL을 사용
    필요한 데이터만 DB에서 불러오려면 검색 조건이 포함된 SQL이 필요함
  • JPQL → 엔티티 객체 대상으로 쿼리
    SQL → 데이터베이스 테이블을 대상으로 쿼리
  • 테이블 아닌 객체 대상으로 검색하는 객체 지향 쿼리
  • 특정 데이터베이스 SQL에 의존X

[인프런 강의 : 자바 ORM 표준 JPA 프로그래밍 참고]

profile
Always live diligently
post-custom-banner

0개의 댓글