학습 봄 - 데이터 - JPA (팔) --- 쿼리에 정의 된 방법

1, 쿼리 전략 
쿼리 전략 세 가지 방법이 있습니다 스프링 데이터 :
QueryLookupStrategy.Key.CREATE가 생성 따라 메소드 이름을보십시오. 일반 과정은 메소드 이름의 특정 세트 및 분석 방법의 나머지 부분에서 접두사를 제거하는 것입니다. 메소드 이름 규칙을 준수하지 않는 경우 예외가 발생합니다.
QueryLookupStrategy.Key.USE_DECLARED_QUERY는, 예외가 슬로우되지 않는 경우, 쿼리가 선언 된 찾아보십시오. 쿼리가 표기 어딘가 다른 방법의 정의에 의해 선언 할 수 있습니다.
QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND (기본값) 및 이들의 조합은 USE_DECLARED_QUERY을 만들 수 있습니다. 쿼리 문을 찾을 수없는 경우 먼저 외모 쿼리 문에 대해, 그것은 쿼리를 기반으로 사용자 정의 메소드 이름을 생성합니다.

우리는 쿼리 정책 수 queryLookupStrategy 속성 @EnableJpaRepositories 설정을 수정합니다.
@EnableJpaRepositories (queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND)
 공용  클래스 StudySpringDataJpaApplication { 

    공공  정적  무효 메인 (문자열 []에 args) { 
        SpringApplication.run (. StudySpringDataJpaApplication 클래스 , 인수); 
    } 

}

2, 쿼리 생성
물리적 저장소 유용에 쿼리 제약을 구축하는 쿼리 빌더를 작성하는 메소드 이름에 따라 내장 2.1, 스프링 데이터를. 이 메커니즘의 방법은 접두사 발견 ... 작성자가 읽고 ...으로는, 쿼리 ...으로는, ...에 의해 계산, 그리고 ...으로, 이러한 방법은 그것의 나머지 부분에서 해결 될 수 있습니다 얻을. 소개 절은 생성 할 쿼리에 다른 로고를 설정하는 등 고유 다른 표현을 포함 할 수있다. 그러나 명령의 역할을함으로써 최초의 구분은 사실상의 표준을 시작합니다. 가장 기본적인에서
수준에, 당신은 개체의 속성 조건 및 사용 AND 및 OR 시리즈에서 수행을 사용자 정의 할 수 있습니다.

2.2 분석 방법의 실제 결과는 영구 저장 장치에 의존하는 쿼리를 생성한다. 단, 몇 가지 일반적인 고려 사항 :
2.2.1, 식 보통 연산자는 속성 통과를 연결할 수 있습니다 때. 속성 표현은 산술 체감 표현식으로 사용 작음, 초과], 사이 키워드 및 속성 일 수의 조합을 사용 AND 및 OR 될 수 있습니다. 지원 사업자는 각 데이터베이스에 대해 다를 수 있습니다, 당신은 공식 문서를 참조 할 필요가있다.
하나의 속성에 대한 2.2.2 파서 지원 방법 지원은 각 데이터베이스의 경우 다른 무시 (IgnoreCase를를) 사건을 무시하거나, 완전히 (AllIgnoreCase를) 사건을 무시하고, 데이터베이스 지원을 참조 할 필요가있다.
2.2.3이 기준이 정렬 방향 (또는 오름차순 제품 설명) 질의 방법을 제공하는 속성있는 OrderBy 절에 부착 될 수있다.
기업이 재산의 실체 인 경우 2.2.4, 우리는 일반적으로 수동으로 트래버스 점을 정의 할 _ 밑줄을 사용 (그래서 사용의 혹을 조절하는 우리의 재산을 이름).

2.3, 키워드 목록  

     

3、特殊参数处理
框架可以识别Pageable和Sort,动态的将分页和排序应用到查询中。可以返回Page<T> 、Slice<T> 、List<T>。
3.1、Sort和Pageable不能传null值,如果不想应用排序或分页,使用Sort.unsorted()和Pageable.unpaged()。
3.2、返回Page<T>,可以知道一些附加信息,如页面总数。他会额外执行一条count语句去查询总数,如果数据量很大,会很消耗资源,可以使用下面的来替代。
3.3、返回Slice<T>,Slice的作用是,只知道是否有下一个Slice可用,不会执行count语句,所以当查询较大的数据量时,也没必要关心页数。
3.4、返回List<T>,分页也可以返回List,这种情况下,也不会额外执行count语句,仅仅是将范围内的结果装入List。

4、限制查询结果
可以通过使用first或者top关键字来限制查询方法的返回结果,可以互换使用。可以将可选的数值追加到它们后面,指定返回结果大小。如果省略数字,则假定结果大小为1。限制表达式也支持Distinct关键字。对于结果集限制为1个的示例查询,支持将结果包装到Optional中。如果将分页或切片
应用于限制查询分页(以及对可用页面数的计算),则会在限制结果内应用分页或切片(不建议分页和限制同使使用)。

5、常用的返回结果的不同形式
5.1、void,对于我们不关乎结果的操作,可以选择不返回结果,一般用作更新。
5.2、Primitives,Java的基本类型,一般用作统计返回,(如long,boolean)。
5.3、Wrapper types,Java的包装类型。
5.4、T,返回一个实体,没有查询结果,返回null,如果超过一个返回结果,抛出IncorrectResultSizeDataAccessException异常。
5.5、Iterator<T>、Collection<T>、List<T>,Set<T>,返回多个结果时,可以使用迭代器,集合,List及其子类,Set及其子类。
5.6、Optional<T>,Java8或者Guava的Optional类,查询方法最多返回一个结果,如果不存在返回Optional.empty()或Optional.absent(),如果超出一个结果,抛出IncorrectResultSizeDataAccessException异常。
5.7、Stream<T>,Java8的Stream。必须在使用后关闭流。可以使用try-with-resources,也可以使用Stream的close()方法。
5.7、Streamable<T>,Spring-Data提供的Streamable,可以作为Iterator或任何集合类型的替代。
5.8、自定义Streamable的类型,实现Streamable并提供一个将Streamable作为参数的公开的构造方法或方法名为of(…) or valueOf(…)的静态工厂方法。
5.9、Slice<T>、Page<T>,分页相关,需要提供一个Pageable入参。Page继承自Slice,Slice继承自Streamable。
5.10、Future<T>,查询方法上需要添加@Async注解,并开启Spring异步执行方法功能。
5.11、CompletableFuture<T>,Java8的CompletableFuture,需要在方法上添加@Async注解,并开启Spring异步执行方法功能。
5.12、ListenableFuture,返回org.springframework.util.concurrent.ListenableFuture,需要在方法上添加@Async注解,并开启Spring异步执行方法功能。
5.13、关联查询时,可返回Object[] 和 Map

源码地址:https://github.com/caofanqi/study-spring-data-jpa

추천

출처www.cnblogs.com/caofanqi/p/11854542.html