SQLプロセッサ
SQL プロセッサは、対応する SQL テンプレートから生成された SQL ステートメントを処理できます。 DAO メソッドを SQL プロセッサとしてマークするには、メソッドに @SqlProcessor アノテーションを付けます。
@Dao
public interface EmployeeDao {
@SqlProcessor
<R> R process(Integer id, BiFunction<Config, PreparedSql, R> handler);
...
}
警告
SQL インジェクションの脆弱性を認識しておくことが重要です。可能であれば、SQL プロセッサ以外の代替方法を検討してください。
戻り値
戻り値の型は、 BiFunction の 3 番目の型パラメータと同じ型でなければなりません。
@SqlProcessor
String process(Integer id, BiFunction<Config, PreparedSql, String> handler);
戻り値の型が void の場合、 BiFunction の 3 番目の型パラメータは Void でなければなりません。
@SqlProcessor
void process(Integer id, BiFunction<Config, PreparedSql, Void> handler);
パラメータ
タイプが BiFunction であるパラメータを含めます。 BiFunction パラメータは設定と SQL ステートメントを受け取り、それらを処理します。 SQL テンプレートでは BiFunction パラメータ以外のパラメータが使用されます。
例
SQL テンプレートから生成された SQL ステートメントを変更して実行するとします。
EmployeeDao dao = ...
dao.process(1, (config, preparedSql) -> {
String sql = preparedSql.getRawSql();
String anotherSql = createAnotherSql(sql);
DataSource dataSource = config.getDataSource()
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(anotherSql);
return statement.execute();
});
select * from employee where id = /*^ id */0