学習春データ-JPA(8)---クエリに定義されたメソッド

1、クエリ戦略
春・データのクエリ戦略の3つの方法があります。
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 { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        SpringApplication.run(StudySpringDataJpaApplication。クラス、引数)。
    } 

}

2、クエリが作成されます
有用な物理的リポジトリ上のクエリ制約を構築するために、クエリビルダを作成するために、メソッド名に基づいて構築された2.1、春・データを。このメカニズムの方法は、プレフィックス検索...デベロッパーを持って、読んで...デベロッパーは、クエリ...デベロッパーは、...デベロッパーを数え、 そして...することで、これらの方法は、それの残りの部分から解決することができます。導入句は、作成するクエリに異なるロゴを設定するために、個別などの他の表現を含むことができます。しかし、命令として作用することにより、最初の区切りはデファクトスタンダードを開始します。最も基本的で
レベルで、あなたは、エンティティの属性条件、および使用ANDとORシリーズで行わをカスタマイズすることができます。

2.2、分析法の実際の結果は永続ストレージに依存し、クエリを作成します。ただし、いくつかの一般的な考慮事項:
2.2.1、表現通常、オペレータは、プロパティトラバーサルを接続することができるとき。属性式は算術枚の式として使用LessThan、演算子:GreaterThanとの間には、キーワード、およびプロパティであってもよいし、組み合わせを使用ANDとORすることができます。サポートされている事業者は、データベースごとに異なる場合があります、あなたは、公式ドキュメントを参照する必要があります。
単一の属性は、ケース(IGNORECASE)を無視する、または完全に(AllIgnoreCase)ケースを無視し、各データベースごとに異なるサポート無視した場合の2.2.2パーサ支援方法は、データベースのサポートを参照してくださいする必要があります。
2.2.3、参照は、クエリメソッドをソート方向(昇順DESC)を提供する、属性の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