DB(RDB)を使う:ぷち上級編

このエントリは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です。びゅーん


See also