menu
書いてる野郎
orebike@gmail.com
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 側からパラメータを取るには SQLに特殊なコメントとしてラベルを埋め込む
SELECT * FROM hoge WHERE piyo = /*aaaaa*/12345
このような感じ。
コメントの後ろにダミーパラメータをつけることができる。 埋め込んだラベルはSQLにとっては単なるコメントでそれに続いてダミーのパラメータが入っているのでこのSQLはvalid なSQLとして普通に実行できる。
S2JDBCからの実行時にラベルとダミーパラメータは外部からのパラメータに置換される。
INのパラメータに配列やリストを使いたい場合はSQLを
WHRER HOGE_ID IN /*hogeIdList*/()
なぜかこのように書かないといけない。プレースホルダとなるコメントのケツに括弧をつけないとバグる。