지난 시간에 이어 간단하게 JPQL을 사용하여 데이터를 SELECT 해서 가져오자!
먼저
JPQL이란!?
Java Persistence Query Language 의 약자로 말그대로 자바 영속성 쿼리이다.
SQL를 추상화 하여 자바 객체화된 entity를 처리하는 언어이다. 결국 DB와 통신시 SQL로 변환된다.
특징
- 테이블이 아닌 객체를 검색하는 객체지향 쿼리
- SQL을 추상화 했기 때문에 특정 벤더에 종속적이지 않음
- JPA는 JPQL을 분석하여 SQL을 생성한 후 DB에서 조회(*즉 JPQL은 SQL로 변환된다)
간단한 조회를 구현했다.
UserController.java
@GetMapping(value = "/user")
public ResponseEntity<APIResponse> srchUser(@RequestParam(name = "userId", required = false) String userId
, @RequestParam(name = "userNm", required = false) String userNm){
return ResponseEntity.status(HttpStatus.OK).body(APIResponse.of(userService.srchUser(userId,userNm)));
}
조회조건으로 userId 또는 userNm을 받는다.
조회조건이 없는 경우 전체조회 된다.
UserService.java
public List<ResponseUser> srchUser(String userId, String userNm) {
List<UserEntity> userList = userRepository.srchUser(userId, userNm);
ResponseUser responseUsers = new ResponseUser();
List<ResponseUser> responseUserList = new ArrayList<>();
for(UserEntity a : userList){
ResponseUser res = responseUsers.toDto(a);
responseUserList.add(res);
}
return responseUserList;
}
UserRepository에서 조회해온 Entity 리스트를 받아서 Dto로 변환 Controller에 리턴해준다
UserRepository.java
@Query(value = "select t.* from TBL_USER_M t " +
"where (:userId is null or t.USER_ID=:userId) " +
"and (:userNm is null or t.USER_NM=:userNm)", nativeQuery = true)
List<UserEntity> srchUser(@Param("userId")String userId, @Param("userNm")String userNm);
@Query 어노테이션의 value값으로 select문을 작성한다. userId, userNm 파라미터가 있는경우와 없는경우가 있으니 null처리를 해주었다. 파라미터를 받을 때 @Param 어노테이션을 사용하여 파라미터의 키값을 명시해주어야 오류가 나지 않는다.
ResponseUser.java
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ResponseUser {
private String userId;
private String userNm;
private String userTel;
private String post;
private String userAddr1;
private String userAddr2;
public ResponseUser toDto(UserEntity userEntity){
return ResponseUser.builder()
.userId(userEntity.getUserId())
.userNm(userEntity.getUserNm())
.userTel(userEntity.getUserTel())
.post(userEntity.getPost())
.userAddr1(userEntity.getUserAddr1())
.userAddr2(userEntity.getUserAddr2())
.build();
}
}
조회된 데이터를 담아 화면으로 보내줄 Dto이다. Entity를 Dto로 변환하는 메소드를 가지고 있다.
이렇게 구현하였고 Swagger를 통해 통신확인 결과
조회가 잘 이루어짐을 확인했다
사용자 업데이트와 삭제는 JPQL로 구현하고
이후 고객정보 ~ 주문관리 등등 BACK 구성은 Querydsl로 진행하려한다~
앞으로도 많이 기대해주세요 : )
'JAVA' 카테고리의 다른 글
땅꼬마의 Querydsl 사용해보기! (0) | 2023.08.05 |
---|---|
땅꼬마의 Springboot3 + JPA 구현하기! (0) | 2023.07.25 |
땅꼬마의 JPA 개념정리!! (0) | 2023.07.24 |
땅꼬마의 Springboot 3.X 버전에 Swagger 연동하기 (0) | 2023.04.24 |
땅꼬마의 While문 만들기! (0) | 2022.10.11 |