エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

Spring FrameworkでRDBMSと通信する手段について調べた

以前Spring Frameworkについて調べていた時、RDBMSとの通信方法をまとめていたのですが記事として公開せず放置していたので公開しておきます。

RDBMSとの通信手段

Spring JDBC

メリット

  • Javaソースコード中にSQLを記述してクエリを発行する。
  • SQLを書けるので慣れた人なら処理が把握しやすい。

デメリット

  • RDBMSの方言に気を付ける必要がある。
  • RDBMSの移行時にSQLの修正コストが発生する可能性がある。

MyBatis

メリット

  • XMLファイルにSQLを記述してクエリを発行する。
  • SQLを書けるので慣れた人なら処理が把握しやすい。

デメリット

  • RDBMSの方言に気を付ける必要がある。
  • RDBMSの移行時にSQLの修正コストが発生する可能性がある。
  • SQLXMLファイル中に記述する必要があるので、XML嫌いなら合わないかも。

Hibernate

メリット

  • Spring側で定義したEntity(@Entityを付与したクラス)に合わせてRDBMSが同期される機構が用意されており、JavaソースコードでEntityを操作するだけでRDBMSも更新される。
  • シンプルなクエリならSQLよりも可読性が上がる。
  • RDBMSの方言を気にする必要が無くなる。
  • JPQLというSQLライクな構文でクエリ発行することもできる。

デメリット

  • 複雑なクエリを書こうとするとSQLと比較してパフォーマンスが落ちるケースがある。
  • 下記の点に留意する必要がある
    • メモリリークの回避
      • キャッシュはいつ作成され、破棄されるのか
    • パフォーマンスの検証
      • RDMBSへの問い合わせはどのタイミングで実行されるのか

あとがき

どれを選択するかは開発チームのスキルセットや今後のシステムの見通し(RDBMSの移行の発生を想定するのか)によって変わってきそうですね。

個人で開発してるアプリではHibernateを利用していますが、RDBMSの方言をライブラリが吸収してくれる点やデフォルトでJpaRepositoryがよく使うメソッド(IDをキーにSELECTするSQLとか)を用意してくれている点が便利です。