このエントリはPlay frameworkひとりアドベントカレンダーの11日目です。
今日はちょっとEBeanの変わった使い方をしてみましょう。
トランザクションを使う
実はちょー簡単。
Ebean
でちょちょってするだけです。
Ebean.beginTransaction();
try {
// some queries
Ebean.commitTransaction();
} catch (Exception e) {
Ebean.rollbackTransaction();
} finally {
Ebean.endTransaction();
}
生SQLを使う
こちらも簡単。
List sqlrows = Ebean.createSqlQuery("select * from twowa").findList();
ちなみに更新系処理の場合は createSqlQuery
ではなく createSqlUpdate
を使います。
createSqlQuery().setParameter()
みたいな感じでパラメーター使った PreparedStatement
もできるようです。
この方法でデータをとった場合は、JDBC直で使ったときのように getString
とかでとります。とります。
Java的にはキャメルケースで属性作ってますけど、DBはスネークケースでできてるみたいです。どうやら。(再)
public static Result index() {
List sqlRows = Ebean.createSqlQuery("select * from twowa")
.findList();
StringBuffer twowasOut = new StringBuffer();
for (SqlRow sqlRow : sqlRows) {
twowasOut.append(String.format("- [%s] %s: %s\n",
sqlRow.getDate("created_at").toString(),
sqlRow.getString("user_id"), sqlRow.getString("contents")));
}
return ok(twowasOut.toString());
}
modelを作るときに @ManyToOne
とかしっかり作りこんでおけばうまいことやってくれるんでしょうけど、それはそれで運用中にDB側で特定テーブルのみのdump/restoreできなくなったりして大変なのでよしあし。
今日まででだいたい機能的にはできるようになったので、明日からviewです。びゅーん