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에 의존적이지 않다는 게 장점인거 같다.
'⭐🌏 JPA > 🌏 JPQL' 카테고리의 다른 글
[JPQL] 전체 테이블 검색 (SELECT * FROM TABLE) (0) | 2022.08.24 |
---|---|
[JPQL] Like 쿼리를 활용한 검색 (0) | 2022.08.24 |