EzJDBCいらなくね><

本日は、相変わらずどうでもよい情報を紹介したいと思います。
JavaコードでタイプセーフなSQLを記述できるオープンソースフレームワークを見つけましたのでご紹介いたします。
そのフレームワークの名前は「jOOQ」といいます。
だらだら説明するよりも、実際のコードをみてみましょう(百一:百文は一見にしかず)
下記のSQLを例にJOOQのコードを見てみます。

SQL例】

SELECT FIRST_NAME, LAST_NAME, COUNT(*)
FROM AUTHOR
JOIN BOOK ON AUTHOR.ID = BOOK.AUTHOR_ID
WHERE LANGUAGE = 'DE'
AND PUBLISHED > '2008-01-01'
GROUP BY FIRST_NAME, LAST_NAME
HAVING COUNT(*) > 5
ORDER BY LAST_NAME ASC NULLS FIRST
LIMIT 2
OFFSET 1
FOR UPDATE
OF FIRST_NAME, LAST_NAME

上記のSQLを「jOOQ」を利用して書くと以下のようになります。

【jOOQでの書き方】

create.select(FIRST_NAME, LAST_NAME, create.count())
.from(AUTHOR)
.join(BOOK).on(Author.ID.equal(Book.AUTHOR_ID))
.where(LANGUAGE.equal("DE"))
.and(PUBLISHED.greaterThan(parseDate('2008-01-01')))
.groupBy(FIRST_NAME, LAST_NAME)
.having(create.count().greaterThan(5))
.orderBy(LAST_NAME.asc().nullsFirst())
.limit(2)
.offset(1)
.forUpdate()
.of(FIRST_NAME, LAST_NAME)

説明はいりませんね。SQLそのままです。
SQLそのままなら、Javaで書く必要性なくね!と思われた方もいるでしょうが、Javaで記述するとタイプセーフかつネームセーフになるのです。
例えば、属性が文字列のカラムを抽出条件とした場合、誤って比較値に数値を受け渡した場合は、Eclipe上で即エラーが発生します。
SQLの場合だと実行しないと、この種のエラーは判別できません。
また、selectする項目名をtypoした場合も即座にエラーになるため、記述ミスをすることがなくなります。
さらに!
Eclipseを利用すると保管機能がりようできますので、カラム名を全てマニュアルで入力する必要がなくなりますので、流れるようにコードを記述することが可能になります。
保管機能ではJavaDocが表示されますので、Eclipse上でカラムの日本語名(論理名)や桁数属性などを確認しながらSQLを記述することができるのです。

と、ここからが本題!
上記「jOOQ」のコードを初めて見たとき、EzJDBCが勝手にオープンソースにされている。と思うほどEzJDBCにそっくりなので驚きました。
以下にEzJDBCで記述した例を記載します。

【EzJDBCでの書き方】

select(AUTHOR.firstName, AUTHOR.lastName, AUTHOR.count())
.from(AUTHOR)
.join(BOOK).on(AUTHOR.id.eq(Book.id))
.where(BOOK.language.eq("DE"))
.and(BOOK.published.gt("2008-01-01"))
.groupBy(AUTHOR.firstName, AT.lastName)
.having(AUTHOR.count().gt(5))
.orderBy(AUTHOR.lastName.asc().nullsFirst())
.limit(2)
.offset(1)
.forUpdateOf(AUTHOR.firstName, AUTHOR.lastName)

どうですか?かなり近いですね。って、ことはEzJDBCいらなくね~>< というオチに入り込むと。。。