以前Spring Frameworkについて調べていた時、RDBMSとの通信方法をまとめていたのですが記事として公開せず放置していたので公開しておきます。
RDBMSとの通信手段
Spring JDBC
メリット
デメリット
MyBatis
メリット
デメリット
Hibernate
メリット
- Spring側で定義したEntity(
@Entity
を付与したクラス)に合わせてRDBMSが同期される機構が用意されており、JavaのソースコードでEntityを操作するだけでRDBMSも更新される。- Ruby on RailsのActive Recordが機能的に近い。
- シンプルなクエリならSQLよりも可読性が上がる。
- RDBMSの方言を気にする必要が無くなる。
- JPQLというSQLライクな構文でクエリ発行することもできる。
デメリット
- 複雑なクエリを書こうとするとSQLと比較してパフォーマンスが落ちるケースがある。
- 下記の点に留意する必要がある
- メモリリークの回避
- キャッシュはいつ作成され、破棄されるのか
- パフォーマンスの検証
- RDMBSへの問い合わせはどのタイミングで実行されるのか
- メモリリークの回避
あとがき
どれを選択するかは開発チームのスキルセットや今後のシステムの見通し(RDBMSの移行の発生を想定するのか)によって変わってきそうですね。
個人で開発してるアプリではHibernateを利用していますが、RDBMSの方言をライブラリが吸収してくれる点やデフォルトでJpaRepositoryがよく使うメソッド(IDをキーにSELECTするSQLとか)を用意してくれている点が便利です。