1. JPA - 쿼리 메서드

지원·2026년 2월 26일

SpringBoot

목록 보기
8/17
post-thumbnail

컬럼 검색 조건 생성

  • 비교 대상이 되는 예제 객체를 만들어 매개변수에 전달 가능
  • Example 클래스의 of() 정적 메소드를 호출해 Example 객체 생성
    ex)
@Override
public void run(ApplicationArguments args) throws Exception {
	Example<Member> example=Example.of(
    	Member.builder().name("길동"). age(10).build(),
        ExampleMatcher.matchingAll()
    );
    
 List<Member> members=memberRepository.findAll(Example);
 members.forEach(member => log.info("{}", member);
}

위치 예시

in 레포지터리

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
	List<Member> findAllByName(String name);
    List<Member> findByName(String name);
    List<Member> findByNameIs(String name);
    List<Member> findByNameEquals(String name);

저장 기능

  • .save()
    = insert SQL
public void saveUser(UserCreateRequest request) {
	userRepository.save(new User(request.getName(), request.getAge()));

save 메소드에 객체를 넣어주면 INSERT SQL이 자동으로 날라간다.
이때 id가 담겨있다.

조회 기능

  • .findAll()
    = select * from 테이블;
    Iterable을 반환한다.
public List<UserResponse> getUsers() {
	return users.stream()
    .map(user -> new UserResponse(user.getId(), user.getName(), user.getAge()))
    .collect(Collectors.toList());
}

모든 데이터 조회

  • .findById()
    ID 조회
    Optional라서 .orElseThrow()를 쓸 수 있도록 한다.

수정 기능 (저장 기능 응용)

  • .save()
public void updateUser(UserCreateRequest request) {
	User user = userRepository.findById(request.getId())
    .orElseThrow(IllegalArgumentException::new);
	user.updateName(request.getName());
    userRepository.save(user);

User 객체에 .updateName(String name)을 만들고 .save()로 처리
*참고로 예외처리도 해야한다.

삭제 기능

  • .delete(삭제할 곳 입력)

  • .deletById()

  • .deletAll()
    = DELETE FROM user WHERE name = ?

  • 인터페이스 내에 findByName 함수 만들기
    = select * from 테이블명 WHERE 필드이름 = ?;

public interface UserRepository extends JpaRepository<User, Long> {
	User findByName(String name);
}

By 뒤에 붙는 필드 이름으로 SELECT 쿼리의 WHERE문이 작성된다.

  • findByName과 같이 추출 후 delete 사용해서 삭제

By 앞에 들어갈 수 있는 구절

  • find : 1건을 가져온다. 반환 타입은 객체가 될 수도 있고, Optional<타입>이 될 수도 있다.
  • findAll : 쿼리의 결과물이 N개인 경우 사용 List<타입> 반환.
  • exists : 쿼리 결과가 존재하는지 확인. 반환 타입은 boolean
    ex) .existsByName()
  • count : SQL의 결과 개수를 센다. 반환 타입은 LONG이다

By 뒤에 올 수 있는 구절

  • 각 구절은 And나 Or로 조합할 수도 있다.
    ex) findAllByNameAndAge(String name, Integer age)
  • GreaterThan : 초과
  • GreaterThanEqual : 이상
  • LessThan : 미만
  • LessThanEqual : 이하
  • Betweeen : 사이에
//ex
List<User> findAllByAgeBetween(int starAge, int endAge);
// = SELECT * FROM user WHERE age BETWEEN ? AND ?
  • StartsWith : ~로 시작하는
  • EndsWith :~로 끝나는
  • IsNull : 존재X
  • IsNotNull : 존재O
  • findByOrderByNameAsc (ㄱㄴㄷ순)
  • findByOrderByNameDesc (역순)

@Query

직접 SQL문 입력 가능

@Query("SELECT * FROM member WHERE age >=13 AND age <= 19")
List<member> findTeenAge;
profile
개발 공부하는 김지원

0개의 댓글