MyBatisをやめて、JdbcTemplateを使うわ。
以前のエントリーで、DBアクセスにはMyBatisを選んだと書きました。
http://d.hatena.ne.jp/cero-t/20141212/1418339302
そしたら渋谷JavaのLTで [twitter:@yukung] さんに拾ってもらっちゃいました。
http://www.slideshare.net/yukung/j-ooq-shibuyajava9
そんなこともあってMyBatisイチオシなエンジニアに思われたかも知れませんが、
ごめんなさい、
あの記事はあくまでも伏線で、僕、もうMyBatis使ってないんです!
MyBatisを使って半月ぐらいして、
どうにも我慢できなくないことが出てきました。
1. Spring Bootとの連携がイマイチ
Spring BootでMyBatisを使おうとすると、
前回のエントリーで書いた通り、ちょっと設定ファイルが必要になったり、
その設定ファイルの読み込みに失敗して、謎の無限ループが起きることがあるなど、
やや不可解なことがあります。
設定ファイルの問題というなら、設定ファイルを使わず、
ソースコードだけで設定できれば良いのですが、その方法も、結局よく分かりませんでした。
まぁMyBatisAutoConfigurationとかができてからが本番というか、
ないなら自分で作るゾ、ぐらいの勢いで挑む必要があるように思いました。
2. XMLにSQLを書くと、インデントががが。
じゃぁMyBatisAutoConfigurationを作れば良いわけですが、
そういう気になれなかったのは、やっぱり、
XMLファイルにSQLを書くのが嫌だったから、でした。
だって、標準的なフォーマッタでフォーマットした瞬間、
インデントが全部消えるじゃないですか。
自動フォーマットをこよなく愛する僕としては、
フォーマットする手段がないというのは、いただけませんでした。
3. そこでJdbcTemplateですよ
じゃぁ何を使ってるのか?
で、結局、Springに標準でついているJdbcTemplateを使っています。
無設定で使えて、値のバインドは適切にできて、
NamedParameterJdbcTemplateならSQLに変数が使えて、
Entityにはアノテーションとか付けなくて良くて、
余計な機能はなくて、シンプルに使える感じでした。
ただ、もちろん、JdbcTemplateも欠点だらけです。
・publicフィールドに対応していない
・Java8のLocalDateなど、Date and Time API (JSR-310) に対応していない
・RowMapperを求めるAPIになっているなど、APIに古くさいものが混ざっている
・そもそも、SQLファイルを読み込む機能なんてない!
なので、これらを補うような
独自ラッパーでラッピングして使うことにしました。
詳しい紹介はまた改めて書くとして、モノはここに置いています。
https://github.com/cero-t/sqltemplate
独自ライブラリではなく、Spring標準のJdbcTemplateを
ちょっとだけラッピングして使っているだけなので、
政治的な意味で使いやすいかな、と思っています。