본문 바로가기
spring/JPA

[JPA] 객체지향 쿼리 언어(JPQL)

by H.초보개발자 2023. 12. 14.
반응형

이 글은 인프런의 김영한 강사님 자바 ORM 표준 JPA 프로그래밍-기본 편 강의 내용을 바탕으로 작성되었습니다.

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 - 인프런

현업에서 실제로 JPA로 개발을 하고 있습니다. 그런 입장에서보면 지금 작성하고 있는 코드들이 어떻게 작동하는지 이해하는데 큰 도움을 주는 강의입니다. 다음은 제가 느낀 이 강의의 장점들

www.inflearn.com

테이블과 객체 모델의 관계

 

간단한 JPQL을 활용하여 쿼리 사용하기

           TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class);
           List<Member> resultList = query.getResultList();
           Member result = query.getSingleResult();

 

JPQL을 활용하여 쿼리에 조건문 달기

            Member sigleREsult = em.createQuery("select m from Member m where m.username = :username", Member.class)
                    .setParameter("username", "member1")
                    .getSingleResult();

 

JPA에서 페이징 기법

            List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
                    .setFirstResult(0)
                    .setMaxResults(10)
                    .getResultList();
            System.out.println("result.size = "+ result.size());

 

JPA 조인하기

            String query = "select m from Member m inner join m.team t";
            List<Member> result = em.createQuery(query, Member.class)
                    .getResultList();

 

JPA 조인 대상 필터링하기

            String query = "select m from Member m left join m.team t on t.name = 'teamA'";
            List<Member> result = em.createQuery(query, Member.class)
                    .getResultList();

 

연관관계 없는 외부 조인하기

            String query = "select m from Member m left join Team t on m.username = t.name";
            List<Member> result = em.createQuery(query, Member.class)
                    .getResultList();

 

select에 타입이 들어가기

            String query = "select m.username, 'HELLO', true from Member m " +
                    "where m.type = :userType";
            List<Object[]> result = em.createQuery(query)
                    .setParameter("userType", MemberType.ADMIN)
                    .getResultList();

 

조건문쿼리 - case

            String query = "select " +
                    "case when m.age <= 10 then '학생요금' " +
                    "when m.age >= 60 then '경로요금' " +
                    "else '일반요금' " +
                    "end " +
                    "from Member m";
            List<String> result = em.createQuery(query, String.class).getResultList();

 

coalesce 함수

            String query = "select coalesce(m.username, '이름 없는 회원') from Member m";
            List<String> result = em.createQuery(query, String.class).getResultList();

 

nullif

            String query = "select nullif(m.username, '이름 없는 회원') from Member m";
            List<String> result = em.createQuery(query, String.class).getResultList();

 

그 외에 jpql 기본 함수

            String query = "select 'a' || 'b' From Member m";
            String query = "select concat('a','b') From Member m";
            String query = "select subString(m.username, 2, 3) From Member m";
            String query = "select locate('de','abcdefg') From Member m";
            List<Integer> result = em.createQuery(query, String.class).getResultList();
반응형

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

[JPA] 값타입  (0) 2023.12.12
[JPA] 프록시와 연관관계 관리  (1) 2023.12.11
[JPA] 고급매핑  (0) 2023.12.11
[JPA] 다양한 연관관계 매핑  (0) 2023.12.08
[JPA] 연관관계 매핑 기초  (2) 2023.12.07