JPA로 원하는 매개변수로 findBy 메소드 생성하기
- Coding/JPA
- 2021. 2. 14.
반응형
728x90
반응형
기본제공 findById(PK) 메소드
public Optional<Member> getMember(Long idx) {
return memberRepository.findById(idx);
}
JPA에서 ID값을 파라미터로 SELECT 할 수 있는 기본 findById 메소드를 제공한다. 하지만 ID 필드가 아닌 다른 여러 필드들로도 데이터를 조회할 경우가 생기게된다.
상황
로그인 API를 구현하면서 파라미터로 받아온 아이디와 패스워드에 맞는 회원 정보가 있는지 조회해야하는 상황이 생겼다.
1) AuthController.java
@PostMapping("/login")
public ResponseEntity<?> login(@ModelAttribute LoginDto loginDto, @ApiParam(hidden = true) HttpSession session) {
/* ID, PWD 체크 */
Optional<Member> member = memberService.getMemberLoginCheck(loginDto);
if(member.isEmpty()) {
throw new BadRequestException();
}
...
}
2) MemberService.java
/**
* 회원 존재 여부 확인
* @param loginDto
* @return
*/
public Optional<Member> getMemberLoginCheck(LoginDto loginDto) {
return memberRepository.findByMemberIdAndMemberPwd(loginDto.getMemberId(), loginDto.getMemberPwd());
}
3) MemberRepository.java
public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByMemberIdAndMemberPwd(String memberId, String memberPwd);
}
주의할점
memberId, memberPwd에 맞는 WHERE 조건으로 조회해오는 메소드를 Repository.java에 생성하여 해당 메소드를 호출하여 상황을 해결했다. 여기서 주의할점은 메서드 명이다.
findByMemberIdAndMemberPwd
단순한 메서드명으로 보이겠지만, 여기서 보이는 키워드를 보자.
MemberId
And
MemberPwd
이 3가지의 키워드를 통해 우리는 WHERE-AND 쿼리를 사용하겠다는 의미로 선언했다. 따라서 memberId, memberPwd를 다른 명칭으로 쓴다면 JPA에서는 해당 컬럼을 찾을 수 없다는 에러를 발생시킨다. 만약 비밀번호 컬럼명이 memberPwd인데, findByMemberIdAndPwd로 메서드명을 지정했을때 Pwd 컬럼을 찾을 수 없다는 에러를 만난다. 메서드명을 통해 컬럼명, And, Or, Between 등으로 쉽게 원하는 데이터를 조회할 수 있음을 인지하자.
반응형
'Coding > JPA' 카테고리의 다른 글
SQL 중심의 개발 vs JPA (0) | 2021.07.30 |
---|---|
JPA 처음 적용해보기 (with persistence.xml, EntityManagerFactory) (1) | 2021.07.08 |
[SpringBoot + JPA] Lombok @Builder 빌더패턴 적용기 (2) | 2021.02.13 |
JPA의 기본개념과 장점 (ORM 프레임워크) (0) | 2021.02.13 |
[SpringBoot + JPA] DTO, Entity의 빌더패턴 적용기 (6) | 2021.02.05 |