티스토리 뷰
1. 삭제
1. name을 기준으로 User가 있는지 확인
2. User가 있다면 DELETE 쿼리를 날린다.


// JpaRepository를 상속하는 것만으로도 UserRepository는 Spring bean으로 등록된다.
public interface UserRepository extends JpaRepository<User, Long> {
// name을 기준으로 조회
// 데이터가 있으면 User 객체 반환, 없으면 null 반환
User findByName(String name);
}
public void deleteUser(String name) {
// findByName 같은 기본 내장 함수는 없다. 따라서 이런 함수를 직접 만들어줘야 한다.
// 어디에? UserRepository interface
User user = userRepository.findByName(name);
if(user == null) throw new IllegalArgumentException();
userRepository.delete(user); // 주어지는 데이터(user)를 DB에서 제거한다.
}
- 함수 이름이 중요하다. 반드시 findByName 이라고 적어줘야한다.(함수명에 맞춰서 알아서 SQL이 생성돼 날라간다.)
- 그냥 이게 Spring Data JPA의 법칙이니 알아두자
- 'find'라고 작성하면 1개의 데이터만 가져온다.
- 'By' 뒤에 붙는 필드 이름으로 SELECT 쿼리의 WHERE 문이 작성된다.
- 결론 : findByName = SELECT * FROM USER WHERE NAME = ?;
cf) findById와 비슷한 findByName 같은 JpaRepository 기본 내장 함수는 없다.
● 다양한 Spring Data JPA 쿼리
1. findByName과 같이 By 앞에 들어갈 수 있는 기능부터 알아보자
[By 앞에 들어갈 수 있는 구절]
- find : 1건을 가져온다. 반환 타입은 객체가 될 수도 있고 Optional<타입>이 될 수도 있다.
- findAll : 쿼리의 결과물이 N개인 경우 사용, List<타입> 반환
- exists : 쿼리 결과가 존재하는지 확인, 반환 타입은 boolean(존재 O = true / 존재 X = false)
- count : SQL의 결과 개수를 센다. 반환 타입은 long ex) long countByAge(Integer age);


2. By 뒤에 들어갈 수 있는 기능들
- By 뒤에 올 수 있는 구절의 경우 각 구절들을 And 나 Or로 조합할 수도 있다.
[By 뒤에 들어갈 수 있는 구절 정리(필드명 뒤에 들어가야한다.)]
- GreaterThan : 초과 / GreaterThanEqual : 이상
- LessThan : 미만 / LessThanEqual : 이하
- StartsWith : ~로 시작하는 / EndsWith : ~로 끝나는
- Between : 사이에
ex)
List<User> findAllByNameAndAge(String name, int age);
=
SELECT * FROM USER WHERE NAME = ? AND AGE = ?;
List<User> findAllByAgeBetween(int startAge, int endAge); // 파라미터명은 크게 상관 없다.
=
SELECT * FROM USER WHERE AGE BETWEEN ? AND ?;
cf)
intellij 실행 시 finished with non-zero exit value 1 오류
intellij, Gradle 환경에서 프로젝트를 첫 실행 할 때 아래와 같은 오류가 발생하는 경우가 있습니다. Execution failed for task ':DemoSpringApplication.main()'. > Process 'command 'JDK경로/bin/java.exe'' finished with non-zero
yjh5369.tistory.com
'Backend > Spring' 카테고리의 다른 글
#28 책 생성 API - INSERT (1) | 2023.10.02 |
---|---|
#27 영속성 컨텍스트 (1) | 2023.09.28 |
#25 트랜잭션 - 이론 (0) | 2023.09.25 |
#24 JPA를 이용해 SQL 날리기 with Spring Data JPA (0) | 2023.09.19 |
#23 Entity Class (0) | 2023.09.10 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- DART
- nosql
- 프로그래머스
- API
- 프로세스
- Java8
- Spring Boot
- MongoDB
- 운영체제
- spring
- jpa
- db
- 코딩테스트
- java
- SQL
- git
- Stream
- 메모리
- node.js
- 빅데이터
- OS
- Phaser
- 자료구조
- 빅데이터 분석기사
- Phaser3
- 코테
- MySQL
- SpringBoot
- Advanced Stream
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함