본문 바로가기

⭐🌏 JPA/🌏 JPQL

JPQL을 이용한 API 개발하기 [SELECT * FROM WHERE ={}]

1. 컨트롤러에 api 생성하기

    // JPQL을 용한 쿼리조회
    @GetMapping("/jpql_title")
    public List<BoardEntity> jpql_title(@RequestParam(value = "title") String title) {
        return boardService.jpql_title(title);
    }

- @GetMapping("/jpql_title") → 외부에서 url 호출 시 사용하는 주소값이다.

- public List<BoardEntity> jpql_title(@RequestParam(value = "title") String title) { → 외부 url에서 호출할때 아래와 같이 파라미터 값을 부여하여 호출해야 한다. 한마디로 title이라는 외부 인자값을 가지고 수행한다고 볼 수 있다.

(예시 : http://localhost:18081/api/board/jpql_title?title=안녕하세요)

- return boardService.jpql_title(title); → 위에서 받은 외부 인자값을 가지고 boardService.jpql_title(title); 이라는 놈을 호출?한다.

 

2. boardService  파일의 내용을 살펴보면 아래와 같다.

    public List<BoardEntity> jpql_title(String title) {
        return entityManager.createQuery("select m from board m where m.title = :title", BoardEntity.class)
                .setParameter("title", title)
                .getResultList();
    }

- public List<BoardEntity> jpql_title(String title) { → List<BoardEntity>를 참조한다, 컨트롤러에서 리턴으로 넘겨받은 인자값을 받는다.

- return entityManager.createQuery("select m from board m where m.title = :title", BoardEntity.class) → JPQL의 SELECT + WHERE절의 문법이다. SQL과 많이 닮았지만 다른점도 많으니 주의하자. from절의 board는 테이블의 이름이 아닌 entity의 이름이다. JQPL은 테이블에 종속되지 않고, SQL문과 비슷하게 문법이 제공되므로 사용성이 매우 높다고 본다.

- .setParameter("title", title) → 파라미터 값을 설정한다.

- .getResultList(); 결과값을 반환한다.

 

3. BoardEntity 파일을 살펴보면 아래와 같다.

엔티티 파일을 생성하면 테이블과 컬럼을 자동적으로 생성해준다.

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "board")
@Table(name = "board")
public class BoardEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "title")
    private String title;

    @Column(name = "description")
    private String description;

    @Column(name = "published")
    private boolean published;

}

테이블을 보면 아래와 같다.

위의 엔티티 값에 따라 테이블이 자동적으로 생성된것을 볼 수 있다.

이번에는 SELECT * FROM WHERE 조건절에 대한 JQPL 내용을 보았지만 더많은 문법을 정리할 필요가 있다.

JPQL은 네이티브 쿼리와 달리 특정 DB에 의존적이지 않다는 게 장점인거 같다.