目に付いたJavaのDBアクセス周りのライブラリを調査してみました。自分のメモ程度の内容を共有します。
基本的にちゃんとしたORMならJPAでいいじゃんという感じなのかな?
それじゃあ冗長だという場面で、使うって印象受けた。
僕だったら小さく始める系ではMirage-SQLとかIciqlで初めて、他のものに場面に応じて変更していくのが良いのではないかと。
sql2o [Not ORM]
- Sparkにサンプルあり。おそらく単純だからだと思われる。
- 基本的にSQLからPojoにマップするだけ。
- Modelをそのまま保存するsave()とかinsert(),update()みたいなメソッドはない。ただし、bind()でパラメータをオブジェクトのフィールド名で保存はできる。
- トランザクションの制御のサポート機能あり。ブロックやアノテーションの機能はない。
DbOom [Jodd]
- Joddライブラリ集の一つ。Joddは機能ごとに切出せて何かと使いやすそう。
- 実行されるSQLをパラメタ埋め込み状態で取得でき、デバッグに有利。
- Modelをそのまま保存できるinsert()あり。updateにも補助スクリプトあり。
- セッションとかの機能もついてるのはいいかも。
- トランザクションは一通りのサポートあり。
- Camel <-> snake 変換機能あり。
- キャッシュもあるらしい。
- 初期設定は自分で細々積み上げる必要があるが、必要な道具は一通り揃ってる感じ。
- 余計なことしないのはいいけど、面倒かも。
- JoddのJTXは他のライブラリ使うときも切り出して使えそう。
Doma
- S2Daoの後継として作成されている。
- 2Way-SQLで実行できる。
- SELECTのSQLは自動生成されない。
- 更新系は自動生成サポートあり。もちろん自分でも記述できる。Modelをそのまま保存できる機能あり。
- トランザクション、Camel <-> snake 変換などの機能は一通りあり。
- 自動生成のクラスが大量に生成される。コンパイル時に暗黙生成なので動作を理解してないと何事かと思う。
- コンパイルされたモジュールは巨大になる。
- 自動生成とかあるので初期設定とか簡単なのか気になる。
- ちと仕組みが煩雑なので学習コストが気になる。また、柔軟ではあるけど、柔軟に使いこなすには知らなければならないことが多くなりそう。
Mirage-SQL
- S2Daoに使用感にている。
- 2Way-SQLで実行する。
- トランザクションサポートあり。
- カラム名はアノテーションで対応を記述するタイプ。
- 更新系は自動生成サポートあり。もちろん自分でも記述できる。Modelをそのまま保存できる機能あり。
- 無理に自動化宣言化してなくて難しくなっていない。
- 更新が活発ではないのが気になるが、最近も少し更新されているので変に難しくならなそうで却っていいかも。
Iciql
- 単一のjarで提供される
- 設定ファイルなしで使える
- DBからモデル生成できるツール付き
- iciqlはトランザクション機能はないので、自分でやる。getConnection()を使えば java.sql.Connection が取得できるので、コミットやロールバックは適宜行う。
- 登録 db.insert(b) 更新 db.update(b) 削除 db.delete(b) マージ db.merge(b)(idの有無で update or insert) も可能。
MyBatis [Not ORM]
- SQL文とオブジェクトのマッピングを行う。このため、レガシーな環境や非正規化されたテーブル、SQL文を自前で制御したい場合によい。
- Struts2 標準
- XMLいっぱい書いて定義する。
- ちょっと重厚長大。
やはり、このライブラリは既存システムとかに何らかの理由でDBアクセス層を導入しなければならなくなった時とか、プロジェクトの人数が多い時に利用するのに向いているのかもと思う。
XMLでの定義とかは、気軽に小規模開発とかだと冗長な気がする。
その代わりにXMLの定義さえ書いてしまえば開発メンバー間などで定義や使用方法などを共有できるし、変更箇所の影響範囲なども検出しやすいのかもしれない。
まとめ
やっぱいろいろ特色あって、調べてて面白かった幾つかは実際に使用した、使用感をまとめて記事にしますね。
そしてやはり場面に応じて特性を考えて使い分けるのが良いのは間違いないとこではあるなと。