@@ -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