본문 바로가기

Spring/JPA

JPA- 기본 문법과 쿼리 API

jpql

 쿼리를 통해 값 찾아오기

package jpql;

import javax.persistence.*;
import java.util.List;

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {

            Member member = new Member();
            em.persist(member);

            // TypedQuery: 반환 타입이 명확한 경우 사용
            TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class);
            // Query: 반환 타입이 명확하지 않을 때 (userName: String, age: int)
            Query query2 = em.createQuery("select m.userName, m.age from Member m");

            //.getResultList(): 결과가 하나 이상일 때, 리스트 반환. 결과가 없으면 빈 리스트 반환
            List<Member> members = em.createQuery("select m from Member m where m.id>1", Member.class)
                    .getResultList();
            //.getSingleResult(): 결과가 정확히 하나, 단일 객체 반환. 결과가 하나 이상 혹은 없는 경우 에러 발생
            Member singleResult = em.createQuery("select m from Member m where id = 100", Member.class)
                    .getSingleResult();

            tx.commit();
        } catch (Exception e) {
            tx.rollback(); // 오류 발생 시 롤백
            e.printStackTrace(); // 에러 내용 출력
        } finally {
            //종료
            em.close();
        }
        emf.close();
    }
}

 

파라미터 바인딩

Member result = em.createQuery("select m from Member m where m.username= :username", Member.class)
                    .setParameter("username", "member1")  // 파라미터 바인딩 (username에 member1 대입)
                    .getSingleResult();

'Spring > JPA' 카테고리의 다른 글

JPA- 페이징  (0) 2023.05.13
JPA- 프로젝션  (0) 2023.05.12
JPA- 값 타입 컬렉션  (0) 2023.04.30
JPA- 값 타입의 비교  (0) 2023.04.30
JPA- 값 타입과 불변 객체  (0) 2023.03.23