New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
What should we using ResultSet directly? #316
Comments
もしSQLテンプレートがバインド変数を持っているとしたら、
dao.select(parameter1, parameter2, (config, preparedSql) -> {
try (
Connection con = config.getDataSource().getConnection();
PreparedStatement stmt = con.prepareStatement(preparedSql.getRawSql());
// pass parameters via PreparedStatement
stmt.setString(1, parameter1);
stmt.setString(2, parameter2);
ResultSet rs = stmt.executeQuery();
) {
useResultSet(rs);
return null;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}); |
少し複雑ですが SelectCommand.handleResultSetをカスタマイズする感じです。 |
ご回答ありがとうございます。 ちなみに、 できれば、次のような public interface ResultSetProcessor extends BiFunction<Config, PrepraredSql, Void> {
void process(ResultSet resultSet) throws SQLException;
@Override
default Void apply(Config config, PreparedSql sql) {
try (
Connection con = config.getDataSource().getConnection();
...
ResultSet resultSet = ps.executeQuery();
) {
this.process(resultSet);
return null;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
...
dao.select(parameter1, parameter2, resultSet -> {
useResultSet(resultSet);
});
|
並んでいます。
なるほど。あくまで ちなみに、 |
あら、そうでしたか。
JRXML に SQL を組み込めることは知っているのですが、 SQL テンプレートの書きやすさやメンテのしやすさから、検索までは Doma2 にしてもらって、 |
並び順はバインド順なんですが、データ構造がDomaに都合のいい形なので
なるほど。JasperReports使ったことないので推測で書きますが、 JRDataSourceを見るといろんな実装があるようなので、ResultSetではなくJavaBeansとかMapを渡す方法を検討してもいいかもしれませんね。JavaBeansやMapであれば |
JavaBeans より なので、おっしゃられている通り JavaBeans の お騒がせしました。 |
Doma2 で
ResultSet
を直接利用したい場合、@SqlProcessor
を使って次のように実装するのが正しいのでしょうか?テンプレート処理は Doma2 に任せたいと考えています。
この場合、 SQL は
getFormattedSql()
で取得したものを使うことで問題ないのかが気になっています(PreparedStatement
のプレースホルダを使わないことによるセキュリティリスクがあったりするのか、など)。よろしくお願いします。
The text was updated successfully, but these errors were encountered: