강의 내용 질문드립니다.
150
작성한 질문수 31
package jpabook.jpashop.domain.repository;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.PersistenceUnit;
import jpabook.jpashop.domain.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManager em;
public void save(Member member) {
em.persist(member);
}
public Member findOne(Long id) {
return em.find(Member.class, id);
}
public List<Member> findAll() { // 회원 목록 조회
return em.createQuery("select m from Member m", Member.class) ry
.getResultList();
}
public List<Member> findByName(String name) {
return em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
}
}
위의 코드에서 findByName메소드에서 왜 단건조회가 아닌 리스트 조회를 사용한건가요? 어차피 중복가입은 안되고 이름으로 조회하니까 하나의 결과가 나와야하는거 아닌가요?
findByName 메소드에서 setParameter은 왜 있는건가요? 설명부탁드릴게요.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
findByName메소드에서 리스트 조회를 사용한 이유는 사용자의 이름으로 조회 시, 이름이 같은 여러 회원이 존재할 수 있으므로, 여러 결과값을 받아오기 위해 리스트로 조회하는 것입니다. 실제 서비스에서는 중복가입이 안된다고 해도 시스템의 유연성을 위해 또는 다른 요인으로 인해 같은 이름을 가진 사용자가 여러명 있을 수 있기 때문입니다.findByName메소드에서setParameter를 사용하는 이유는 쿼리에 동적으로 파라미터를 바인딩하기 위해서입니다. 쿼리 실행 시,:name부분에 메소드에 전달된name변수의 값을 대입하여 실행합니다. 이런 방식을 사용함으로써, 쿼리의 안정성을 높이고 SQL 인젝션 같은 보안 문제를 예방할 수 있습니다.
제공된 정보에는 쿼리 메소드와 관련된 자세한 설명이 포함되어 있지 않아, 질문에 대한 답변은 일반적인 JPA 사용법과 관례에 기반하여 제공되었습니다.
HelloSpringApplication.java 클래스 실행 오류
0
12
1
build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)
0
20
1
Inner class로 Config를 지정하는 이유
0
27
1
네이버 API | '검색 - 책' API 제공 중단
0
40
2
Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.
0
47
2
장치 의존성과 CSR
0
36
1
테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.
0
31
1
[영한님]Spring Boot 및 프로젝트 생성
0
56
2
리뉴얼 시기
0
48
2
JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문
0
55
3
강의 요청 문의
0
40
2
클로드코드 명령어-대화&세션관리 수업 자료
0
42
1
PlatformTransactionManager, ResourcelessTransactionManager 질문
1
67
2
자료 한번에 다운받기
0
33
1
스프링 빈 등록 방법 2가지 다 알아야하는 이유
0
59
1
mybatis 를 이용한 crud에서 insert에서 resultType='long" 이라고 하셨는데요,
0
27
1
설계 트레이드 오프 링크 접속 안됨
0
85
2
테스트 질문, 어떤것을 사용할것인것에 대해서
0
46
1
깃허브주소 궁금합니다.
0
36
2
mariaDB 설정
0
33
1
섹션4 퀴즈 오타있어요.
0
46
1
service-discovery 프로세스 가동 이유
0
51
1
AWS 배포 성능테스트
0
75
2
퀴즈가 안열려요
0
76
2





