

S save(S entity) -> persist(...) 와 같음 : 영속성 상태로 추가
S saveAndFlush(S entity) : persist() + flush() 같이 수행
List<S\> saveAll(Collection<S\> ...)
List<S\> saveAllAndFlush(....)
<S extends T> List<S> saveAllAndFlush(Iterable<S> entities);
Iterable.. 반복 가능 , list/set 형태의 모든 자료가 여기 들어간다.
void delete(T entity) : remove(...)

count()
Iterable findAll()
S findOne(..)
S findById(기본키)

낱개 조회 할때 값이 없을때를 대비하여 반환값을 Optional로 처리한다.
... get...
👩💻참고)
find로 시작하는 메서드 : 영속 상태
get로 시작하는 메서드 : 비영속 상태 - 상태변화 감지 X
조회 할 시 flush 암묵적으로 발생함 ( * 수정 )
em.setFlushMode(FlushModeType.AUTO);필요함!!! [ex08 테스트 예제 참고]



예제



10명 회원 추가

🔽

findAll -> 전체 조회
...
@Test
void test2(){
List<Member> members = memberRepository.findAll();
members.forEach(System.out::println);
}

find + (엔티티 이름) + By + 변수이름


구현체 정의 없이 메서드 패턴으로 조회



예제2

...
List<Member> findByEmailContainingAndUserNameContainingOrderByCreatedAtDesc(String key1, String key2);


복잡한 조건일 경우 너무 메서드 명이 길다.
이렇게 쓰지는 않음 간단한 조건일때만 사용한다.
예제3
참고 스프링Data JDBC


PageRequest -> 구현 클래스






JPQL(Java Persistence Query Language)
✅ MemberRepository 인터페이스

✅ test


@Query 애노테이션을 이용한 방법에도 단점이 있다. @Query 애노테이션 안에 JPQL 문법으로 문자열을 입력하기 때문에 잘못 입력하면 컴파일 시점에 에러를 발견할 수 없음
이를 보완할 수 있는 방법으로 Querydsl이 있다.
쿼리 직접 입력하는 일은 지양하자!!
특정 메서드를 조합해서(조검식, 조회필드..) 쿼리 완성 시키는 방식
Querydsl 장점
- 고정된 SQL문이 아닌 조건에 맞게 동적으로 쿼리를 생성할 수 있습니다.
- 비슷한 쿼리를 재사용할 수 있으며 제약 조건 조립 및 가독성을 향상시킬 수 있습니다.
- 문자열이 아닌 자바 소스코드로 작성하기 때문에 컴파일 시점에 오류를 발견할 수 있습니다.
- IDE의 도움을 받아서 자동 완성 기능을 이용할 수 있기 때문에 생산성을 향상시킬 수 있습니다.

implementation 'com.querydsl:querydsl-jpa:5.1.0'

자동으로 코드 만들어줌
annotationProcessor 'com.querydsl:querydsl-apt:5.1.0'

패키지를 자카르타로 인식하게 하도록...
build.gradle
...
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile){
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
file(querydslDir.deleteDir())
}

자동으로 만들어짐!!

조건식에 필요한 메서드가 추가된다

객체를 얘를 가지고 접근!
QueryDslPredicateExecutor를 함께 상속 -> 기존 Repository 메서드에 Predicate가 매개변수인 메서드가 추가된다.


매개변수에 Predicate 있음 -> 조건식/ 판별식


여러 검색 조건을 만드는 경우


or, not도 마찬가지..
메서드 체이닝!




- JPAQueryFactory
- JPAQuery