[Java] Spring Bootで「JDBC」はもうオワコン?実は最強の武器になる瞬間
こんにちは。ゆうせいです。
JPA、MyBatisと便利なツールを見てきたあとだと、その土台にある「JDBC」について疑問を持つのは当然ですね。
「わざわざ不便なJDBCを、今の時代にSpring Bootで使う意味なんてあるの?」
「それはもう、おじいちゃん世代の遺産(レガシー技術)なんじゃないの?」
そんな声が聞こえてきそうです。
結論からズバリ言います。
Spring BootにおけるJDBC(正確には JdbcTemplate )は、決して時代遅れではありません。
むしろ、「特定の場面では、JPAやMyBatisを凌駕する最強の武器」 になります。
なぜハイテクな全自動ツールがあるのに、あえて原始的なナイフを使うのか?
今回は、その意外な「生存理由」と、プロがJDBCを選ぶ瞬間について解説します。
そもそもSpringでの「JDBC」とは?
まず誤解がないように整理しましょう。
Spring Bootで「JDBCを使う」と言うとき、Java標準の生のJDBC(Connection や PreparedStatement を自分で書くこと)を指すことはほぼありません。
Springが用意してくれている JdbcTemplate (ジェイディービーシー・テンプレート) という薄いラッパー機能を使うことを指します。
これは、生のJDBCの「面倒な接続処理」や「例外処理」はSpringがやってくれるけれど、「SQLの実行」と「データの詰め替え」は人間がやる という、非常にシンプルな仕組みです。
なぜ時代遅れではないのか?
JPAやMyBatisがあるのに、なぜこれを使うのでしょうか。
理由は大きく3つあります。
1. 圧倒的な「速さ」(バッチ処理)
これが最大の理由です。
例えば、「夜間に100万件のデータを一気に登録する」というバッチ処理を想像してください。
- JPAの場合1件ずつ「Javaのオブジェクトを作る」→「状態をチェックする」→「SQLを作る」→「登録する」という手順を踏むため、大量処理には向きません。メモリも大量に消費します。
- JDBC(JdbcTemplate)の場合余計なチェックをせず、データベースに直接SQLを流し込むだけです。
特に「バッチ更新(Batch Update)」という機能を使えば、JPAの何倍、何十倍ものスピードで処理が終わります。
「日中のWeb画面はJPA、夜間の重い処理はJDBC」という使い分けは、現場のプロがよくやる定石です。
2. 「魔法」がない安心感
JPAもMyBatisも、裏側でいろいろな「おせっかい(自動処理)」をしてくれます。
しかし、時にはそれが邪魔になることがあります。
「とにかく書いた通りのSQLを、そのまま実行してほしいだけなんだ!」
「キャッシュとか遅延ロードとか、余計なことはしないでくれ!」
そんなとき、JdbcTemplate は最高です。
書いたSQLがそのまま飛び、返ってきた結果がそのまま手に入る。
この 「シンプルさ」と「透明性」 は、複雑なトラブルが起きたときのデバッグで非常に役立ちます。
3. 学習コストが低い
MyBatisを使うにはXMLの書き方を、JPAを使うにはアノテーションのルールを覚える必要があります。
しかし、JdbcTemplate は「SQL」と「Java」の知識だけで動かせます。
小さなツールや、使い捨てのプログラムを作るときに、わざわざ重厚なフレームワークを設定するよりも、サクッとJDBCで書いたほうが早いことも多いのです。
コードで見る「面倒くささ」と「分かりやすさ」
とはいえ、普段使いのメインウェポンにならないのには理由があります。
それは、「検索結果をJavaの形に戻す作業(マッピング)」が面倒だから です。
コードを見比べてみましょう。
MyBatisやJPAの場合
// 1行で終わる
User user = repository.findById(1);
JdbcTemplateの場合
// SQLを書く
String sql = "SELECT id, name, email FROM users WHERE id = ?";
// 取得したデータを、手作業でUserクラスに詰め替える(RowMapper)
User user = jdbcTemplate.queryForObject(sql, new Object[]{1}, (rs, rowNum) -> {
User u = new User();
u.setId(rs.getLong("id")); // ここが手作業!
u.setName(rs.getString("name")); // カラムが増えると大変!
u.setEmail(rs.getString("email"));
return u;
});
見ての通り、(rs, rowNum) -> { ... } の部分で、データベースのカラムとJavaの変数を一つひとつ手作業で紐付けています。
項目が100個あったら、100行書かなければなりません。これが「JDBCは開発効率が悪い」と言われる理由です。
まとめ:いつJDBCを使うべきか?
Spring BootにおけるJDBC(JdbcTemplate)は、決して「過去の遺物」ではありません。
「万能ナイフ(JPA/MyBatis)」では切れない硬いものを切るための「専用カッター」 です。
現場での立ち位置をまとめるとこうなります。
- Web画面の普段使い→ JPA や MyBatis を使う。(開発スピード優先)
- 大量データを扱うバッチ処理→ JDBC (JdbcTemplate) を使う。(処理スピード優先)
- 複雑すぎてフレームワークの挙動が怪しいとき→ JDBC で生のSQLを叩く。(確実性優先)
今後の学習の指針
新人エンジニアの皆さんは、最初から JdbcTemplate をガツガツ書く必要はありません。まずは便利なJPAやMyBatisで開発効率の良さを体感してください。
その上で、次のステップとしてこれを知っておいてください。
- 「RowMapper」という存在を知るJPAやMyBatisが裏側でやってくれていた「詰め替え作業」は、実はこういう地味なコードなんだと知ることで、フレームワークへの感謝と理解が深まります。
- バッチ処理の担当になったら思い出す将来、「処理が遅すぎて終わらない!」という壁にぶつかったとき、「そういえば、ゆうせいがJDBCは速いって言ってたな」と思い出してください。それが突破口になります。
道具にはすべて、適した場所と使い道があります。
古い新しいではなく、「適材適所」で見極められるエンジニアになってくださいね。
それでは、また次の記事でお会いしましょう。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。