kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

S2Dao Sqlアノテーションで少し複雑なSQL文を書く

S2Daoを使用して、少し複雑なSQL文を書くことになりました。2つのテーブルを結合して、条件に合ったレコードを抽出するSQL文です。条件のパラメータは、メソッドの引数から複数取得します。

下記のように記述することで、実装できました。ポイントは3つありました。

ポイント1は、メソッドの引数を、S2Daoに認識させるため、Argumentsアノテーションを記述しました。

ポイント2は、テーブル結合と抽出条件を指定するためSqlアノテーションを記述しました。

ポイント3は、Sqlアノテーション内で、メソッドの引数を使用する場合、「/*$project_id*/project_id」のような書き方になりました。前方のproject_idは、Argumentsアノテーションで指定した引数名に対応し、後方のproject_idは実行時にメソッド引数の値で置換されました。

	@Arguments( { "PROJECT_ID", "KIND", "TIMESTAMP" })
	@Sql("SELECT metrics.*, document.name as documentName FROM metrics JOIN document ON metrics.project_id = document.project_id AND metrics.document_id = document.id WHERE metrics.project_id = /*$project_id*/project_id AND kind = /*$kind*/kind AND timestamp = \' /*$timestamp*/timestamp \' ORDER BY document_id, path;")
	public Metrics[] selectByProjectId_Kind_Timestamp(long projectId, int kind,
			Timestamp timestamp);

動作確認環境