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