SpringBootからMySQLやPostgres等のRDBに接続する方法は複数あります。プロジェクトごとに迷うポイントとなっています。
No | 接続方式 | SQLファイル | メリット | デメリット | 初期構築 | 現場実績 |
1 | spring-data-jpa | ×SQLは書かない。 | エンティティを構築すれば、INSERT文、UPDATE文、DELETE文を書く必要がない。 | 発行されるSQLを直接制御できない。 N+1問題に常に注意を払う必要がある。 | エンティティ作成の必要あり。 リレーションを表現する場合はエンティティ設定が難しくなる。 | △少ない。 |
2 | spring-mybatis | △XMLに定義 | 構築が簡単で、採用例が多い。 | 必要なファイルを配置すればよく、比較的易しい。 | 〇よく採用される。 | |
3 | spring-jdbc | ×StringでSQL文字列生成 | ResultSetからDTOへの変換処理は書く必要がある。 | ×見ない。 | ||
4 | Doma2 | 〇 | SQL単体として実行できる形式でSQLファイルの記述ができる。(2-way-SQL) | アノテーションプロセッサーの設定が難しい。 エンティティ作成の必要あり。 | 〇技術に敏感な会社では採用されている。 |
いづれも、SELECT結果を自作のDTOに格納するORM機能は備えている。
DB接続方式決定のポイント
spring-mybatis
Spring以前のStruts系フレームワークの時代からMybatisは使われており、慣れている技術者は多い。
最も無難な選択である。
Doma2
spring-data-jpa
おススメしない。
エンティティ群を構築すれば基本的なCRUDはできるようになるのは魅力的だが、JPAという仕様についてしっかり知っておく必要があり、学習コストが高めな印象。
複雑なSELECT文、検索用SQLや集計用SQLには、結局ネイティブSQLを使うことになる。
JPQLというSQLに似た文法もあるが、採用されたプロジェクトを見たことはない。やはり、ネイティブSQLを使った方が早いからである。
補足ですが、JDBCドライバを使用して、Servlet/JSP時代のDAO/DTOパターンも使用できます。