Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- MotionLayout
- RxKotlin
- 동영상
- 인앱결제
- GCP
- 테스트 자동화
- Observable
- junit
- Android 13
- php
- PagingLib
- SwiftUI Tutorial
- MediaSession
- mvvm
- paging
- databinding
- Kotlin
- Animation
- node
- list
- Reactive
- android13
- google play
- Koin
- MediaPlayer
- Android
- rx
- SWIFTUI
- mysql
- node.js
Archives
- Today
- Total
봄날은 갔다. 이제 그 정신으로 공부하자
JpaRepository DB 조회 방법 본문
1. findBy 함수 사용
JpaRepository에서 기본적으로 제공하는 함수로 “findBy” + 컬럼명으로 조합됨.
예를들어 idx가 일치하는 사용자 조회
Optional<User> findByIdx()
userType이 일치하고 salary가 100보다 큰 사용자 조회
List<User> findByUserTypeAndSalaryCreaterThen()
2. @Query 어노테이션 사용
@Query을 사용하여 아래와 같이 조회 쿼리 직접 작성할 수 있습니다.
idx가 일치하는 사용자 조회
@Query(“SELECT usr FROM USER AS usr WHERE usr.idx = :idx”)
Optional<User> findUser(Long idx);
userType이 일치하고 salary가 100보다 큰 사용자 조회
@Query(“SELECT usr FROM USER AS usr WHERE usr.name = :name AND usr.salary > :salary”)
List<User> findUsers(String name, Long salary);
3. JPAQueryFactory 사용
조건이 복잡해지면 위 방식 DB를 조회하는 것에 한계가 있습니다.
사용자가 집접 쿼리를 작성할 수 있는 방법이 JPAQueryFactory 방식입니다.
이방식은 사전에 해야 할 것이 몇개 있습니다.
step1. interface class 생성
public interface UserRepositoryCustom {
Optional<User> findUser(Long idx);
List<User> findUsers(String name, Long salary);
}
step2. interface class 상속
@Repository
public interface UseJpaRepository extends JpaRepository<User, Integer> UserRepositoryCustom {
...
}
step3. interface 를 상속받아 implement class 생성
@RequiredArgsConstructor
public class UserRepositoryCustom implements UserRepositoryCustom {
...
}
step4. 검색을 위한 cond class 구현
@Setter
@Getter
@Builder
public class UserSearchCond {
private Long idx;
private String name;
private Long salary;
}
step5. JPAQueryFactory를 사용해 implement class 구현 및 검색 조건 함수 추가
class에 검색을 위해 아래 함수들을 추가한다.
@RequiredArgsConstructor
public class UserRepositoryCustom implements UserRepositoryCustom {
// 검색을 위해 아래 함수들을 추가한다.
private BooleanBuilder allCondForUser(UserSearchCond cond) {
Long idx = cond.getIdx();
String name = cond.getName();
Long salary = cond.getSalary);
BooleanBuilder builder = new BooleanBuilder();
builder.and(idxEq(idx));
builder.and(nameEq(name));
builder.and(salarydEq(salary));
return builder;
}
/** idx 조건 (null이면 무시) */
private BooleanExpression idxEq(Long idx) {
return idx == null ? null : user.idx.eq(idx);
}
/** name 조건 (null이면 무시) */
private BooleanExpression nameEq(String name) {
return name == null ? null : user.name.eq(name);
}
/** idx 조건 (null이면 무시) */
private BooleanExpression salaryEq(Long salary {
return salary == null ? null : user.salary.eq(salary);
}
}
step6. JPAQueryFactory를 사용해 implement class 구현
@RequiredArgsConstructor
public class UserRepositoryCustom implements UserRepositoryCustom {
private final JPAQueryFactory queryFactory;
@Override
Optional<User> findUser(Long idx) {
// 검색 조건 생성
UserSearchCond cond = UserSearchCond
.builder()
.idx(idx)
.build();
// 검색 조건에 맞는 직원 조희
Optional<User> user = queryFactory
.selectFrom(user)
.where(allCondForUser(cond))
.fetch();
reutrn user;
}
@Override
List<User> findUsers(String name, Long salary){
// 검색 조건 생성
UserSearchCond cond = UserSearchCond
.builder()
.name(name)
.salary(salary)
.build();
// 검색 조건에 맞는 직원 목록
List<User> users = queryFactory
.selectFrom(user)
.where(allCondForUser(cond))
.fetch();
reutrn users;
}
}'학습' 카테고리의 다른 글
| [PHP] cURL (0) | 2025.12.01 |
|---|---|
| JSON String 파싱하는 방법 (0) | 2025.11.24 |
| node.js로 웹서비스 만들기 (24. 서버 다운 문제 대응) (1) | 2023.08.28 |
| node.js로 웹서비스 만들기 (23. Compute Engine 일정 관리) (0) | 2023.08.27 |
| node.js로 웹서비스 만들기 (22. Compute Engine 재 시작시 서비스 자동 실행하기) (1) | 2023.08.25 |
Comments