[Spring] JPQL(Java Persistence Query Language) 이란?

류재성's avatar
Mar 14, 2024
[Spring] JPQL(Java Persistence Query Language) 이란?
 

1. JPQL(Java Persistence Query Language) 이란?

💡
JPA에서 사용하는 객체 지향 쿼리 언어로, 데이터베이스 테이블 대신 엔티티 객체 모델을 대상으로 쿼리를 작성한다.
 

(1) 기본 문법

 
Board 객체를 전체 조회한다.
select b from Board b //b 는 Board 의 모든 데이터를 출력
 
Board 객체의 제목과 내용을 조회한다.
select b.title,b.content from Board b
 
where절을 사용한 조건 검색
select b.title from Board b where b.id = :id;
 
JOIN 사용
select b from Board b join fetch b.user u where b.id =:id //Board 엔티티와 User 엔티티를 조인, Board 엔티티 필트에 User 오브젝트를 넣는다.
notion image
 
💡
Board 엔티티 내부에 User 엔티티를 넣는다. 이렇게 되면 Board 객체를 조회할 때 User 객체의 데이터를 함께 받을 수 있다.
 

2. JPQL 을 활용한 데이터 조회

 
네이티브쿼리
select * from board_tb order by id desc;
 
JPQL, BoardPersistRepositoyu
public List<Board> findAll(){ Query query = em.createQuery("select b from Board b order by b.id desc",Board.class); return query.getResultList() ; }
 

3. JUnit 테스트

 
test/java/shop.mtcoding.blog/board/BoardPersistRepositoryTest
@Test public void findAll_test(){ //given //when List<Board> boardList = boardPersistRepository.findAll(); //then System.out.println("findAll_test/size : "+boardList.size()); System.out.println("findAll_test/username : "+boardList.get(2).getUsername()); //org.assertj.core.apo Assertions.assertThat(boardList.size()).isEqualTo(4); Assertions.assertThat(boardList.get(2).getUsername()).isEqualTo("ssar"); }
 
notion image
 
💡
DB에 전달되는 쿼리가 JPQL 방식이다.
 

4. 컨트롤러

 
@GetMapping({ "/"}) public String index(HttpServletRequest request) { List<Board> boardList = boardPersistRepository.findAll(); request.setAttribute("boardList",boardList); return "index"; }
 

5. View 확인하기

 
{{#boardList}} <div class="card mb-3"> <div class="card-body"> <h4 class="card-title">{{title}}</h4> <div class="mb-3">{{time}}</div> <a href="/board/{{id}}" class="btn btn-primary">상세보기</a> </div> </div> {{/boardList}}
 
notion image
 
데이터가 정상적으로 화면에 출력된다.
 
 
 
Share article

{CODE-RYU};