성장일기

내가 보려고 정리하는 공부기록

백엔드/JPA

[JPA] 강의 추가학습 기록(2) - 스프링부트와 JPA활용1

와나나나 2024. 2. 27. 19:42
728x90

인프런 김영한 강사님의 스프링부트와 JPA활용1 강의를 듣고 추가로 학습한 내용을 정리한 게시물입니다.

 

지난 게시물과 마찬가지로 강의를 들으면서 이해하지 못했던 것들을 기록하며 공부해보려고 한다. 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의 - 인프런

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., 스프

www.inflearn.com

 

추가학습 내용은 다음과 같다.

  1. SQL과 JPQL

1. SQL vs JPQL

JPQL은 SQL을 추상화 한 객체 지향 쿼리 언어로 JPA에서 제공하는 언어이다.

추상화했기 때문에, 기능이 동일하고 문법도 유사하다. (SELECT, FROM, WHERE, GROUP BY, JOIN, HAVING을 지원한다)

 

차이점

둘의 차이는 대상에 있다. SQL은 테이블 대상 쿼리이지만, JPQL은 엔터티 객체 대상 쿼리이다!

또, JPQL은 SQL을 추상화했기 때문에 특정 DB의 SQL에 의존하지 않는다는 장점이 있다고 한다.

 

 

JPQL 문법

SQL과 비슷하게 SELECT, UPDATE, DELETE문을 사용할 수 있다.

 

✅ SELECT문

SELECT m FROM Member m WHERE m.userid="1234"

 

  • entity와 속성은 대소문자를 구분한다.
  • 코드에서 쓴 Member은 클래스명이 아닌 엔터티명이다. (@Entity(name = oo))
    • 엔터티명을 지정하지 않으면 클래스명을 기본값으로 쓴다.
  • 별칭을 필수로 써야한다.

 

TypeQuery와 Query

 

JPQL을 실행하려면 쿼리객체를 만들어야 하는데, 반환 타입의 명확성에 따라 TypeQuery와 Query를 사용한다.

  • TypeQuery : 반환 타입 명확
  • Query : 반환 타입 명확 X
// 타입쿼리
TypeQuery<Member> tQuery = em.createQuery("SELECT m FROM Member m", Member.class);

// 쿼리
Query query = em.createQuery("SELECT m FROM Member m");

 

 

파라미터 바인딩

 

아래 코드처럼 이름 기준 파라미터 바인딩을 지원한다. 프로퍼티 앞에 :를 붙여 바인딩 해주면 된다. 아래 코드는 username에 one 이 바인딩된다.

TypedQuery<Member> tQuery = 
    em.createQuery("SELECT m FROM Member m WHERE m.username = :username", Member.class)
    .setParameter("username", "one");
    
List<Member> list = tQuery.getResultLst();

 

 


24.2.23 추가학습 끝