MyBatisの記事一覧
MyBatis に関する記事を 15 本まとめています。Spring Boot の実装・設計・運用の観点で関連テーマを横断して読めます。
-
Spring Boot + MyBatisでMapperを単体テストする方法 - @MybatisTestが存在しない理由とH2/Testcontainersでの代替構成
MyBatisのMapperには@DataJpaTest相当の専用スライステストが存在しない。その理由をSqlSessionとの結合度から解説し、@SpringBootTest最小構成・軽量Java Config・H2・Testcontainersの4パターンを比較表と動くコードで示す。
-
Spring Boot + MyBatisの@CacheNamespaceで2次キャッシュを実装する方法 - cacheタグとRedis連携
MyBatis組み込みの2次キャッシュ機構を使い、読み取り頻度の高いMapperのDB負荷を減らす方法を解説。cacheタグとPerpetualCacheの基本動作、@CacheNamespaceによるJava Config定義、INSERT/UPDATE時の自動フラッシュ、@CacheNamespaceRefによる複数Mapper間でのキャッシュ共有、カスタムCache実装でRedisへ差し替える手順まで、Spring Bootでの設定例とともに紹介します。
-
Spring Boot + MyBatisでdiscriminatorを使った多態マッピング - 1テーブルを種別ごとに出し分けるresultMap実装
MyBatisのdiscriminatorタグとcase要素を使い、1つのテーブルやJOIN結果に混在する複数種別(通知種別・決済方法など)を、Java側の分岐処理なしでresultMapだけで異なるDTO/サブクラスにマッピングする方法を解説します。
-
Spring Boot + MyBatisで楽観的ロックを実装する方法
MyBatisでJPAの@Versionに相当する楽観的ロックを自作する方法を解説。versionカラムを使ったUPDATE文のWHERE句設計、更新件数0件での競合検知、Spring標準例外を拡張した例外クラス、トランザクション境界を意識したリトライ戦略までMapper XMLとアノテーション両方のコード例で紹介します。
-
Spring Boot + MyBatisでSqlProviderを使ってJavaコードだけで動的SQLを組み立てる方法
MyBatisのXML動的SQLに疲れた人向けに、@SelectProvider/@InsertProvider/@UpdateProviderを使ってJavaコードだけで動的SQLを組み立てる方法を解説。SqlBuilderと文字列結合の実装例、複数引数の受け渡し、つまずきやすいポイント、XML方式との使い分け基準まで実務目線でカバーします。
-
Spring Boot + MyBatisでINSERT後の自動採番ID(AUTO_INCREMENT)を取得する方法
MyBatisでINSERT実行後にDBが採番したAUTO_INCREMENT/IDENTITY値をJavaエンティティに反映する方法を、アノテーション方式とXML方式の両方で解説します。selectKeyによる代替実装や、IDが0/nullのまま返ってくる典型原因の切り分け方も紹介します。
-
Spring Boot + MyBatisでsqlタグ・includeタグを使ってSQLを再利用する方法 - Mapper間のクエリ重複を解消する
複数のMapper XMLで同じWHERE条件やSELECT列リストをコピペしていませんか。MyBatisのsqlタグでSQLフラグメントを定義し、includeタグで同一Mapper内・別Mapper XML間から再利用する方法、propertyによるパラメータ渡し、foreachなど動的SQLタグとの組み合わせ方を解説します。
-
MyBatisとは?JPAとの違いとSpring Bootでの最小構成をやさしく理解する
MyBatisがどんなO/RマッパーなのかをJPA/Hibernateとの思想の違いから整理し、向き不向きの判断軸とmybatis-spring-boot-starterでの最小構成までを解説します。
-
Spring Boot + MyBatisで@Transactionalによるトランザクション管理を実装する方法 - SqlSessionとDataSourceTransactionManagerの仕組み
MyBatisには永続化コンテキストがなく、@TransactionalはSqlSessionのコミット/ロールバックタイミングを制御しているだけです。SqlSessionTemplateのスレッドバインディング、ログでの可視化、JdbcTemplateとの併用、checked例外の罠を動くコードで確認します。
-
Spring Boot + MyBatisで「Invalid bound statement (not found)」「Parameter 'xxx' not found」が出る原因と対処
Spring Boot 3.x + MyBatisで起きるBindingException(Invalid bound statement (not found) / Parameter 'name' not found)とMapperのbean未検出を、mapper-locations・namespace・@Param・-parameters・@MapperScanの順に切り分けて直す手順をまとめます。
-
Spring Boot + MyBatisの動的SQL - where・set・trim・choose・bind・foreachの書き方と「ANDが先頭に残る」「末尾カンマ」「IN句が空で落ちる」の対処
Spring Boot + MyBatisの動的SQLタグ(where/set/trim/choose/bind/foreach)を、書いたXMLと実際に発行されたSQLを並べて解説。条件が全部空でも壊れない検索Mapper、末尾カンマが残らない部分更新、foreachに空リストやnullを渡しても落ちない防御パターンまで、エラー別の対処法をまとめます。
-
Spring Boot + MyBatisで1対多・多対1の結合結果をマッピングする方法 - resultMapのassociation・collectionとN+1対策
Spring Boot 3 + MyBatisで親子テーブルのJOIN結果を階層DTOに詰める方法を解説。resultMapのassociation(多対1)とcollection(1対多)、columnPrefixによるカラム衝突回避、ネストselectとネストresultMapの発行SQL本数比較(N+1の実測)、ページング併用時に件数がズレる罠と回避策まで、XMLとアノテーション両記法のコピペで動くコード付き。
-
Spring Boot + MyBatisでページネーションを実装する方法 - PageHelper・RowBounds・手書きLIMIT/OFFSETの使い分け
Spring Boot + MyBatisで一覧APIのページングを実装する3方式(手書きLIMIT/OFFSET・RowBounds・PageHelper)を、発行SQL・件数取得・ソート・追加依存の観点で比較。RowBoundsがメモリページングになる理由、PageHelperのスレッドローカルの罠とhelperDialect設定、Spring DataのPageableへの変換まで、そのまま動くコードで解説します。
-
Spring BootでMyBatisを使う方法 - Mapper定義・動的SQL・結果マッピングの実装ガイド
Spring BootにMyBatisをゼロから組み込む実装ガイド。mybatis-spring-boot-starterの依存追加からアノテーション/XMLの2記法によるMapper定義、ifタグとforeachタグによる動的SQL、resultMapでの結合結果マッピング、#{}と${}の安全性、@Transactional連携までを動くコードで解説します。
-
Spring BootでMyBatisとJPAどちらを選ぶべきか - 使い分け基準と併用パターン【比較表付き】
Spring BootプロジェクトでMyBatisとJPAのどちらを選ぶべきか迷っていませんか?本記事ではSQL制御の柔軟性・学習コスト・パフォーマンス・保守性を比較表で整理し、実務での使い分けフローチャート、#{} と ${} の違い、両者を併用する具体的な設定例まで解説します。判断材料を一度にまとめて確認できます。