Skip to content

Commit 810fed6

Browse files
committed
ストリーム検索のドキュメントを修正
1 parent fc3bc9c commit 810fed6

File tree

1 file changed

+57
-2
lines changed

1 file changed

+57
-2
lines changed

docs/sources/query/select.rst

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,12 @@ Iterableを使ったIN句へのマッピング
153153

154154
全件を一度に ``java.util.List`` で受け取るのではなく ``java.util.stream.Stream`` で扱いたい場合は、ストリーム検索を利用できます。
155155

156-
ストリーム検索を実施するには、 ``@Select`` の ``strategy`` 要素に ``SelectType.STREAM`` を設定し、
156+
ストリーム検索には、 ``Stream`` を ``java.util.Function`` へ渡す方法と戻り値で返す方法の2種類があります。
157+
158+
Functionへ渡す方法
159+
---------------------------
160+
161+
``@Select`` の ``strategy`` 要素に ``SelectType.STREAM`` を設定し、
157162
メソッドのパラメータに ``java.util.Function<Stream<TARGET>, RESULT>`` もしくは
158163
``java.util.Function<Stream<TARGET>, RESULT>`` のサブタイプを定義します。
159164

@@ -186,6 +191,56 @@ Iterableを使ったIN句へのマッピング
186191

187192
`検索結果の保証`_ を有効にした場合、結果が0件ならば例外がスローされます。
188193

194+
戻り値で返す方法
195+
---------------------------
196+
197+
メソッドの戻り値の型を ``java.util.stream.Stream`` にします。
198+
``Stream`` の要素の型には次のものが使用できます。
199+
200+
* :doc:`../basic`
201+
* :doc:`../domain`
202+
* :doc:`../entity`
203+
* java.util.Map<String, Object>
204+
* :doc:`../basic` もしくは :doc:`../domain` のいずれかを要素とするjava.util.Optional
205+
* java.util.OptionalInt
206+
* java.util.OptionalLong
207+
* java.util.OptionalDouble
208+
209+
.. code-block:: java
210+
211+
@Select
212+
Stream<Employee> selectByNameAndSalary(String name, BigDecimal salary);
213+
214+
呼び出し元です。
215+
216+
.. code-block:: java
217+
218+
EmployeeDao dao = new EmployeeDaoImpl();
219+
try (Stream<Employee> stream = dao.selectByNameAndSalary(name, salary)) {
220+
...
221+
}
222+
223+
`検索結果の保証`_ を有効にした場合、結果が0件ならば例外がスローされます。
224+
225+
.. warning::
226+
227+
リソースの解放漏れを防ぐためにストリームは必ずクローズしてください。
228+
ストリームをクローズしないと、 ``java.sql.ResultSet`` 、
229+
``java.sql.PreparedStatement`` 、 ``java.sql.Connection`` のクローズが行われません。
230+
231+
.. note::
232+
233+
戻り値で返す方法はリソース解放漏れのリスクがあるため、特に理由がない限りは、
234+
Functionへ渡す方法の採用を検討してください。
235+
注意を促すためにDaoのメソッドに対して警告メッセージを表示します。
236+
警告を抑制するには以下のように ``@Suppress`` を指定してください。
237+
238+
.. code-block:: java
239+
240+
@Select
241+
@Suppress(messages = { Message.DOMA4274 })
242+
Stream<Employee> selectByNameAndSalary(String name, BigDecimal salary);
243+
189244
コレクト検索
190245
============
191246

@@ -225,7 +280,7 @@ Iterableを使ったIN句へのマッピング
225280

226281
.. note::
227282

228-
コレクト検索はストリーム検索のショートカットです
283+
コレクト検索はストリーム検索のFunctionに渡す方法のショートカットです
229284
ストリーム検索で得られる ``Stream`` オブジェクトの ``collect`` メソッドを使って同等のことができます。
230285

231286
検索オプションを利用した検索

0 commit comments

Comments
 (0)