[Spring Project] JPA 핵심: EntityManager와 주요 메서드 정리 (persist, find, createQuery)

2025. 4. 29. 18:30·Back end/Spring Project
반응형

이번 포스팅에서는 JpaMemberRepository 코드를 예로 들어 JPA의 핵심 객체인 EntityManager와,

이를 이용한 대표적인 메서드인 persist, find, createQuery 사용법을 정리해보겠습니다.


💡 EntityManager란?

 

  • EntityManager는 JPA에서 엔티티(객체)를 데이터베이스에 저장, 조회, 수정, 삭제하는 등
    모든 데이터베이스 작업을 담당하는 핵심 객체입니다.
private final EntityManager em;

public JpaMemberRepository(EntityManager em) {
    this.em = em;
}

 

위처럼 생성자 주입을 통해 EntityManager를 전달받으면, 해당 Repository 클래스 내부에서 자유롭게 데이터베이스를 조작할 수 있습니다.

 


1. em.persist(entity)

엔티티를 데이터베이스에 저장하는 메서드입니다.

@Override
public Member save(Member member) {
    em.persist(member);
    return member;
}
  • persist()는 주어진 객체를 영속성 컨텍스트에 저장합니다.
  • 트랜잭션이 커밋될 때 실제로 INSERT SQL이 실행되어 데이터베이스에 반영됩니다.

✅ 요약: 새로운 엔티티를 저장할 때 사용합니다.


2. em.find(엔티티 클래스, 기본키)

기본키(PK)를 기준으로 엔티티를 단건 조회할 때 사용하는 메서드입니다

@Override
public Optional<Member> findById(Long id) {
    Member member = em.find(Member.class, id);
    return Optional.ofNullable(member);
}
  • 첫 번째 파라미터는 조회할 엔티티의 클래스 타입,
  • 두 번째 파라미터는 기본키 값입니다.
  • 존재하지 않는 엔티티라면 null이 반환됩니다.
  • cf. 만약 기본키가 아닌 조건으로 조회하고 싶다면 createQuery()를 사용해야 합니다.

✅ 요약: 기본키(PK)로 단건 조회할 때 사용합니다.


3. em.createQuery(JPQL, 결과 타입)

JPQL을 사용해서 원하는 조건으로 조회할 때 사용하는 메서드입니다.

3.1. 이름으로 조회하기

@Override
public Optional<Member> findByName(String name) {
    List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class)
                            .setParameter("name", name)
                            .getResultList();
    return result.stream().findAny();
}
  • createQuery 메서드를 통해 JPQL(객체지향 쿼리)를 작성합니다.
  • :name은 파라미터 바인딩을 위한 자리표시자이며,
    setParameter("name", name)으로 실제 값을 전달합니다.
  • 결과가 여러 개일 수 있으므로 getResultList()를 사용하고,
    그 중 하나를 꺼낼 때는 stream().findAny()를 사용합니다.

✅ 요약: 특정 필드 조건으로 조회할 때 사용합니다.

 

3.2. 전체 조회하기

@Override
public List<Member> findAll() {
    return em.createQuery("select m from Member m", Member.class)
             .getResultList();
}
  • 모든 Member를 조회하는 JPQL입니다.
  • 결과를 List<Member>로 반환합니다.

✅ 요약: 전체 엔티티 목록을 조회할 때 사용합니다.


 

EntityManager는 JPA에서 가장 중요한 객체이며,

persist, find, createQuery는 가장 기본적이면서 자주 사용되는 대표 메서드입니다.


이 3가지 메서드만 제대로 이해해도 JPA 사용에 있어서 기본기를 다질 수 있습니다.

반응형

'Back end > Spring Project' 카테고리의 다른 글

[Spring Project] 반복되는 로직? AOP로 한 방에 해결하기 (예제 포함)  (0) 2025.05.08
[Spring Project] 스프링 데이터 JPA 완전 정복: CRUD부터 메서드 자동 생성까지  (0) 2025.04.30
[Spring Project] JPA(Java Persistence API) - 사용 이유부터 설정 방법까지  (0) 2025.04.25
[Spring Project] 반복되는 JDBC 코드, JdbcTemplate으로 깔끔하게 정리하기  (0) 2025.04.24
[Spring Project] 스프링 부트 정적 컨텐츠와 Welcome Page 동작 원리  (0) 2025.03.26
'Back end/Spring Project' 카테고리의 다른 글
  • [Spring Project] 반복되는 로직? AOP로 한 방에 해결하기 (예제 포함)
  • [Spring Project] 스프링 데이터 JPA 완전 정복: CRUD부터 메서드 자동 생성까지
  • [Spring Project] JPA(Java Persistence API) - 사용 이유부터 설정 방법까지
  • [Spring Project] 반복되는 JDBC 코드, JdbcTemplate으로 깔끔하게 정리하기
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (254) N
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (70)
        • Spring Project (27)
        • Java (21)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (24) N
        • IntelliJ (2) N
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (8)
      • Database (16)
        • Oracle (10)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git
    배열
    springboot
    단계별풀기
    백준알고리즘
    백준 자바
    java
    spring
    github
    BOJ
    문자열
    Oracle
    구현
    백준
    for문
    오라클
    1차원 배열
    jpa
    알고리즘
    solved.ac
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[Spring Project] JPA 핵심: EntityManager와 주요 메서드 정리 (persist, find, createQuery)
상단으로

티스토리툴바