0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MyBatis概要まとめ:Spring BootでDB操作するためのSQLマッパー

0
Posted at

はじめに

この記事は自分の学習用、備忘録として書いてるものです。
もし内容に間違いなどがあればご指摘ください。

この記事で扱う学習範囲

今回の範囲は、Webアプリとデータベースをつなぐ部分

構成としては以下のイメージ。

Webアプリ
  ↓
Spring Bootプロジェクト
  ↓
MyBatis
  ↓
DBMS
  ↓
MySQL

つまり、JavaのWebアプリからDBに対して、検索・登録・更新・削除を行うための仕組みを学ぶための基礎知識をまとめた。


前提知識

この内容を理解するには、最低限以下の知識が必要。

  • Javaの基本文法
  • インスタンス生成
  • メソッド呼び出し
  • HTML / CSSの基礎
  • SQLの基礎
  • Spring Boot / Spring MVC / DIの基礎

MyBatisはDB操作に関わるため、特にSQLの理解が重要になる。


MyBatisとは

MyBatisは、Javaアプリケーションとデータベースをつなぐためのフレームワーク

JavaアプリからDBのデータを読み書きする場合、何らかのDBアクセスの仕組みが必要になる。

代表例は以下。

Java標準        → JDBC
Spring系        → Spring JDBC
Spring系        → Spring Data JPA
SQL重視         → MyBatis

MyBatisはこの中でも、SQLを直接書いてDB操作することを重視したフレームワーク


ORMとは

ORMは、Object-Relational Mapping の略。

簡単に言うと、Javaのオブジェクトと、RDBのテーブルとのデータ変換を簡単にする技術。

Javaのオブジェクト
  ↕
ORM
  ↕
DBのテーブル

Javaではデータをオブジェクトとして扱う。
一方、DBではデータをテーブルとして扱う。

この違いを埋めるのがORM。


一般的なORMの特徴

一般的なORMでは、JavaのオブジェクトとDBのテーブルをマッピングする。

たとえば、以下のようなイメージ。

Userクラス     → usersテーブル
Taskクラス     → tasksテーブル
Orderクラス    → ordersテーブル

メリット

  • SQLを書かなくてもDB操作できる
  • 単純なCRUD処理を簡単に書ける
  • Javaのオブジェクト操作に近い感覚でDBを扱える

デメリット

  • 複雑なSQLを書きにくい
  • パフォーマンスチューニングが難しい場合がある
  • 実際にどんなSQLが発行されているか意識しづらい

MyBatisの位置づけ

MyBatisも大枠ではO/Rマッピングフレームワークに分類される。

ただし、一般的なORMとは考え方が少し違う。

MyBatisは、オブジェクトとテーブルを直接マッピングするというより、オブジェクトとSQLをマッピングする

Javaのオブジェクト
  ↕
MyBatis
  ↕
SQL
  ↕
DBのテーブル

そのため、MyBatisは SQLマッパーフレームワーク と呼ばれることもある。


MyBatisの一番重要な特徴

SQLを開発者が直接書く

ここがJPAなどの一般的なORMとの大きな違い。

SQLを直接書くので、複雑な検索条件やJOIN、パフォーマンスを意識したSQLを書きやすいらしい。


MyBatisの特徴まとめ

項目 内容
マッピング対象 オブジェクトとSQL
SQLの管理 SQLを直接記述する
SQL知識 必要
柔軟性 高い
パフォーマンス調整 しやすい
向いている場面 複雑なクエリが多いプロジェクト
注意点 SQLを理解していないと使いこなせない

MyBatisが向いているケース

MyBatisは、以下のようなプロジェクトで効果を発揮する。

  • 複雑なSQLが多い
  • JOINが多い
  • 検索条件が多い
  • DB依存の処理が多い
  • パフォーマンスを意識したSQLを書きたい
  • 自動生成SQLではなく、自分でSQLを制御したい

業務システムでは、単純なCRUDだけでなく、複雑な検索や集計が必要になることが多い。
そういう場面では、SQLを直接書けるMyBatisは使いやすい。


MyBatisを使うメリット

1. SQLを自分で制御できる

MyBatisではSQLを直接書くため、どんなSQLが実行されるか明確になる。

SELECT *
FROM users
WHERE name = #{name}

フレームワーク任せではなく、自分でSQLの内容を確認できる。


2. 複雑なSQLに対応しやすい

業務システムでは、単純な1テーブル検索だけではなく、複数テーブルをJOINする処理がよくある。

MyBatisなら、複雑なSQLもそのまま書ける。

SELECT
  u.id,
  u.name,
  o.order_date
FROM users u
JOIN orders o
  ON u.id = o.user_id
WHERE u.id = #{userId}

3. パフォーマンスチューニングしやすい

SQLを直接書けるので、無駄なカラム取得を避けたり、JOIN条件を調整したりできる。

SELECT id, name
FROM users
WHERE status = 'ACTIVE'

必要なカラムだけ取得する、条件を工夫するなど、SQLレベルで改善しやすい。



JPAとの違い整理

観点 JPA MyBatis
考え方 オブジェクト中心 SQL中心
SQL 自動生成が多い 自分で書く
学習対象 Entity、Repository、永続化コンテキストなど Mapper、SQL、DTOなど
複雑なSQL 書きにくい場合がある 書きやすい
SQLの見通し 隠れやすい 見えやすい
向いている処理 単純なCRUD中心 複雑な検索・業務SQL中心

MyBatisは「SQLを自分で書いて制御したい場合」に向いている。


まとめ

MyBatisは、Spring BootアプリからDBを操作するためのフレームワーク。

一般的なORMのようにSQLを完全に自動生成するというより、開発者がSQLを直接書き、そのSQLとJavaのオブジェクトをマッピングする。

そのため、SQLの知識は必要になるが、複雑なクエリやパフォーマンスを意識したDB操作に対応しやすい。

Spring Bootで業務アプリを作る場合、単純なCRUDだけでなく、検索条件が多い画面や複雑なJOINが必要になることがある。
そういう場面でMyBatisを使うと、SQLを明確に管理しながらDBアクセス処理を書ける。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?