Spring BootでWebアプリを作るときの第一歩

Spring Bootで初めてWebアプリを作ろうとすると最初につまづくのが「どういうライブラリ組み合わせればええんや…」というポイントなので、自分の中にある選定パターンをメモします。ここで説明するのはWeb層とDBアクセス層をどうするかという部分だけです。

あまり真面目な記事ではないので、ちゃんとした情報を知りたい人はSpring Academyとかを見るのが良いと思います。

マイ・パターン

灰色になっているのは仕事では使ったことのない組み合わせです。

Spring WebFlux + Spring Data R2DBC

Spring初心者は無視して良いです。自分も使ったことがあるのはDBアクセスなしのWebFluxだけです。 Microservicesで言うところのAPI Gatewayだったりリバースプロキシだったり、特定のユースケースのときしか選択肢に上がりません。

Spring MVC

@Controllerとか@RestControllerとか使ういつものアレです。なお「Springってアノテーションだらけの奴でしょ?」という発言には「アノテーションレスのSpring Web MVC.fnとかあるが?」というツッコミが飛んでくるらしいです。

Spring JDBC

Springプロジェクトの一つで、JdbcTemplateなどが使えるライブラリです。javax.sqlをラップした程度の機能しかありませんが、Spring本体と何の問題もなく組み合わせることができますし、小規模なPJであればこれで十分というケースは多いです。

Spring Framework 6.1 (Spring Boot 3.2) からはJdbcClientというFluent APIを使うことができて、ちょっとだけおしゃれに書くことができます。

Spring Data JPA

JPA使いたいときはこれ。逆に言うとJPAじゃなくても良いときは選ばないほうが良いです。

Spring Data JPAJPAとしての機能のほか、Repositoryインタフェースに findByUserId(long userId) みたいなメソッドを宣言するとメソッド名から自動的にクエリを生成してくれるという黒魔術が使えます。

Spring Data JDBC

非常に紛らわしいですが、Spring JDBCとは異なります。

出始めの頃に一度触ってみましたが、最近はどうなっているのかあまり詳しくありません。

Spring Data JPAからJPAを抜いたような感じ(?)で、名前のスタンダード感に反して結構クセが強い印象です。

Doma

ここから先はサードパーティライブラリです。

最近よく使ってるやつ。元Seasarプロジェクトらしく、SQLテンプレートを書くことができます。 カラムの値をドメインと呼ばれるJavaオブジェクトとして扱えるのが大きな特徴です。(例えば、Eメールアドレスを EmailAddress クラスのオブジェクトのまま扱ったり、区分値をEnumのまま扱ったり)

ビルド時にDaoインタフェースの実装クラスを自動生成するので、それに抵抗感がなければ結構おすすめです。

MyBatis

SQLを直接かけるやつ第2弾。

こちらは.sqlファイルではなくXMLファイルにSQLを書きます。(なので">"をエスケープしなければならないのが若干面倒)XMLの設定は柔軟で割りと何でもできますが、やりすぎるとXML地獄になるので注意。

ネット上の情報量が多く、コードジェネレーターなどの周辺ツールも充実しているので安牌と考える人は多いと思います。

まとめ

きちんと比較検討したい人は多田さんのスライドを読むのが良いと思います。今読んでも参考になります。

Java ORマッパー選定のポイント #jsug | ドクセル

DBアクセス周りはR2DBCなどを除いて枯れ気味の分野なので、たぶんしばらくはこのパターンから変わることはないんじゃないかなあ。