DomaのDaoでオーバーロードを使うポイント

DomaのDaoでは、SQLへのバインド変数が同じであればオーバーロードが使えます(S2Daoではオーバーロードは制限されています。)。主に、IterationCallbackとかSelectOptionsをシグネチャにもったメソッドでオーバーロードすることになります。こんな感じです。

    @Select
    List<Employee> selectAll(); ... (1)

    @Select(iterate = true)
    Void selectAll(IterationCallback<Void, Employee> callback); ... (2)

    @Select
    List<Employee> selectAll(SelectOptions options); ... (3)

このときのポイントは、メソッド名が同じであるため、すべて同じSQLファイルにマッピングされるということです。

どういうときにうれしいかというと、同じSQLで、あるケースでは全件取得(1)、あるケースでは全件を1件ずつ取得(2)、あるケースではlimit/offsetつきで取得(3)と使いわけたい場合です。

IterationCallbackとSelectOptionsを両方同時に使うこともできます。使い道はlimit/offsetつきで取得したものを1件ずつ処理したい場合などですね。

    @Select(iterate = true)
    Void selectAll(IterationCallback<Void, Employee> callback, SelectOptions options);