ScalaでDBを使った小物ツールをサクッと作るには?JDBI!?(タイトル修正)

ScalaでORマッパーというとSlickやScalikeJDBC等色々あるが、ほんとにちょっとしたツールを作りたいだけならばもっと手軽にやりたいと思うはず。
ただJDBCを直に使うとなるとこれはこれで逆に使いづらい。
そんなあなたに「Commons DBUtils」…ではなく「JDBI」!
こいつはJDBCを使いやすくしてくれるラッパー…どころか、軽量なのにORマッパーとしての機能を十分に備えるすごいやつ!

Jdbi 3 Developer Guide

「Commons DBUtils」でも良いのだけど、最近密かに凄くイイと思ってるJavaフレームワーク「Dropwizard」に採用されているJDBIがイケてるのでそっちを覚えるといいことがあるかも!

という訳で使ってみた。
DBに接続する部分はhikariCPを使ってます。一番速いらしいコネクションプール実装。

http://jdbi.org/five_minute_intro/
公式にあるコードをちょっと改造しただけだが、DefaultMapperでmapするとMap[String, Any]のリストで返ってくるのでDBUtilsみたいな手抜きコードも書ける!

JDBIはJavaのライブラリだがイテレータを取得してScalaイテレータに変換してしまえばあとはScalaで好き放題書けていい感じ。

公式のものを少しいじった程度だがORマッパー的な機能をScalaで使ってみたのが以下のコード。

DAO用のインターフェースはtraitで問題ない。が、

@RegisterMapper(Array(classOf[ApplicationMapper]))

とかちょっと不自然になってたり、

case class Application(@BeanProperty id: String, @BeanProperty name: String)

いちいち@BeanPropertyつけないといけなかったりするのがあれだけど他のORマッパーよりは手抜きできてると思いたい。

とりあえずScalaでもBeanのマッピングは普通(?)にできる!
簡単かつ強力なJDBIはScalaでも役に立つはず!

追記

…と思ったが、seratch2さんにScalikeJDBCやSkinny ORMで書いた場合のわかりやすい比較を見させていただいた結果(コメ参照)、わざわざScalaアノテーション地獄を体験する意義があまりない気がしてきた。
というかScalikeJDBCでSQLインターポレーションでゴニョゴニョすればサクッと書けるじゃん!!