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 오브젝트를 넣는다.
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"); }
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}}
데이터가 정상적으로 화면에 출력된다.
Share article