S2JDBC/外部のSQLファイルを使ってクエリを投げる

S2JDBC/外部のSQLファイルを使ってクエリを投げる

S2JDBCは外にあるSQLファイルを使ってクエリを投げることができる

Seasar2 - S2JDBC - JdbcManager - SQLファイルによる操作

selectBySqlFileメソッドを使って投げる。selectBySqlメソッドとシグネチャが同じなので間違って使ってもエラーが出ないので注意。

Map<String, Object> params = new HashMap<String, Object>();
params.put("hoge", "ほげ");
params.put("piyo", "ぴよ");
List<Hoge> result = jdbcManager.selectBySqlFile(Hoge.class, "sql/hoge.sql", params).getResultList();

第二引数にSQLファイルへのパスを記述する。通常SAStrutsとかと組み合わせて使う場合は

src/main/resources

がルートとして認識されるのでそこからの相対パスを書くといいと思う。

あとのJava側へのマッピングとかはS2JDBC/SQLを使ってクエリを投げると同じ

このファイルの指定は gen-ddl をやることにより生成してくれるので、そのファイル名集合を使えばスペルミスで存在しないというエラーが回避できる。

Java側からパラメータを取る

Java 側からパラメータを取るには SQLに特殊なコメントとしてラベルを埋め込む

SELECT
    *
FROM
    hoge
WHERE
    piyo = /*aaaaa*/12345

このような感じ。

コメントの後ろにダミーパラメータをつけることができる。 埋め込んだラベルはSQLにとっては単なるコメントでそれに続いてダミーのパラメータが入っているのでこのSQLはvalid なSQLとして普通に実行できる。

S2JDBCからの実行時にラベルとダミーパラメータは外部からのパラメータに置換される。

memo

IN のパラメータに配列やリストを使う

INのパラメータに配列やリストを使いたい場合はSQLを

WHRER HOGE_ID IN /*hogeIdList*/()

なぜかこのように書かないといけない。プレースホルダとなるコメントのケツに括弧をつけないとバグる。

タグ

s2/s2jdbc/use_2waysql_external_sql_file.txt · 最終更新: 2017-09-26 19:17 by ore