Open1
DomaでSQLテンプレートの部品化をサポート(検討中)
基本方針は、Komapperで実現した方法を踏襲。
部品はこう定義する。SQLファイルはサポートせず、アノテーションのみをサポート予定。アノテーションプロセッサでバインド変数の間違いなどをチェックする。
@SqlPartial("limit /* limit */0 offset /* offset */0")
record Pagination(int limit, int offset) {}
部品を利用するDAO。
@Dao
interface EmployeeDao {
@Sql(
"""
select
* from employee e
where
e.departmentId = /* departmentId */0
order by
e.employeeId
/*> pagination */
""")
@Select
List<Employee> selectByDepartmentId(Integer departmentId, Pagination pagination)
}
DAOを呼び出すコード。
EmployeeDao dao = ...;
List<Employee> list = dao.selectByDepartmentId(1, new Pagination(0, 100));
実行されるSQL。
select
* from employee e
where
e.departmentId = ?
order by
e.employeeId
limit ? offset ?
実行時に最終的なSQLに変換させるためにSQLを2回パース(1回目で部品部分を展開して、2回目で通常の処理)しないといけないのがパフォーマンス的に少し懸念。