便利なMyBatisについて知ろう

公開日: 2025/4/23

皆さんはMyBatisについて耳にしたことはありますか。

私自身MyBatisを軽く触ったことがある程度でしたが学習コストが少なく、便利なフレームワークだと感じました。


今回はその便利なMyBatisについて記事作成を通して、読んだ方が基礎知識を学べていただけたらと考えています。

1. MyBatisとは


「マイバティス」と読みます。

MyBatisはJavaや.NET Frameworkで利用可能です。

XMLまたはアノテーションを用いてストアドプロシージャやSQL文をオブジェクトと紐付ける永続性フレームワークです。

Apache License 2.0によるオープンソースソフトウェアとして提供されています。


MyBatisの歴史は、2001年にスタートしたiBATISの後継プロジェクトで、2010年6月からMyBatisという名前に変更されて開発が続いているところから始まります。

2024年4月10日現在、最新バージョンは3.5.16になっています。

MyBatisはJavaで書かれたアプリケーションとリレーショナルデータベースとの間のデータに対するやり取りの手間を少なくする「O/Rマッピング(Object-relational mapping)」の機能を持つ点が大きな特徴の一つです。

2. MyBatisの機能


MyBatisにはさまざまな便利な機能があります。

以下がその機能です。

1.データマッピング機能

XMLにSQLを記述することで、Javaオブジェクトへのマッピングを自動で行います。

2.DBスキーママイグレーション機能

実際の開発現場では、仕様変更によりデータベースのテーブル設計が変更される場合があります。

MyBatisのマイグレーション機能では、そういった場合でも自動的にデータベースへの変更を行うことができる便利な機能があります。

3.コードジェネレータ機能

MyBatisの公式ツールであるMyBatis Generatorを活用すると、テーブルの情報をもとにJavaのコードを自動的に作成できます。

4.さまざまなフレームワークとの連携

MyBatisは、Spring FrameworkやGoogle Guiceなどの多様なJavaフレームワークと連携して使用することができます。

5.キャッシュ機能

キャッシュ機能を利用することで、同一の検索結果が要求された際には、SQLを実行することなくキャッシュ内のデータを取得可能です。

6.ロギング機能

ロギング機能を利用すると、データベースアクセスの他、実行されたSQLや使用されたパラメータもログに記録できます。

3. O/Rマッパーの違い


代表的なO/RマッパーであるMyBatisとHibernateを比較してみます。

1.MyBatis

・マッピング … SQL文とオブジェクト

・SQL … 手動生成


手動生成:

 ・SQLの細かいチューニングが可能になる

 ・SQL文によってはDBMSに依存する(特定のDBMSでしか使用できない)

 ・開発者がSQLを意識する必要がある

2.Hibernate

・マッピング … テーブル構造とオブジェクト

・SQL … 自動生成


自動生成:

 ・SQLが非効率になる可能性がある(細かいチューニングが不可能)

 ・特定のDBMSに依存しない

 ・開発者がSQLを意識しなくてもよい

4. MyBatisのメリット


1.開発効率が上がる

MyBatisを利用することで、データベース操作に関する処理が簡略化され、Javaのコードが最小限で済みます。

データベースに接続するためのプログラムを一切書く必要がないため、多くのデータベースアクセスをするシステムこそ、MyBatisによる大きな恩恵を受けられると考えられます。

2.学習コストが低い

MyBatis自体、機能の数はあまり多くありません。その分、学習する機能の数も多くはないということになります。

また、XMLを利用した記述方法さえマスターしてしまえば、あとはSQLを記述するだけで簡単にデータベースにアクセスできます。

さらにMyBatis Generatorを利用することで、必要なファイルが自動生成されるため、開発者はSQLを記述するだけで済みます。


そのため、データベースに関する基礎的な知識さえあれば容易に利用できるという点がMyBatisの大きなメリットになります。

3.豊富なプラグインを利用できる

Java開発に必要不可欠なIDEであるEclipseやIntelliJには、MyBatisを便利に利用できる豊富なプラグインが提供されています。

5. MyBatisのデメリット


1.コードの読み取りが難しくなる場合がある

MyBatisはXMLファイルを使用するO/Rマッパー(オブジェクト指向プログラミング言語におけるオブジェクトとリレーショナルデータベースの間でデータ形式の相互変換を行うこと)です。

そのため、複雑なSQLクエリを実行することが可能な分、コードの読み取りが難しくなる場合があります。


XMLファイルの使用は、開発者がコードを確認しやすくなるというメリットがありますが、その反面プロジェクトの規模が大きくなると、MyBatisがXMLを解析するのに多くの時間を必要とすることが考えられます。

2.柔軟な管理には長いコードを書く必要がある

MyBatisでは、SQLプロバイダを使用して、Javaメソッド内でSQLを定義します。

SQLプロバイダを使用すると、MyBatisはJavaメソッドが実行するSQLを決定するのに役立ちます。


しかし、SQLプロバイダベースでは、複雑なSQLクエリを実行するのが困難な場合があります。

柔軟な管理を行うためには、多くのJavaコードを書く必要があります。

3.繰り返しのコードが発生する場合がある

MyBatisでは、SQLクエリやマッピングをJavaコードやXMLで手動で記述する必要があります。

これにより、繰り返しのコードが発生する可能性があり、変更やメンテナンスが煩雑になることがあります。

6. MyBatisの使用方法


SQL文はXMLファイルまたはアノテーションに記述することが出来ます。

以下のサンプルはXMLを使用して "Person" を返すSELECT文の定義です。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.PersonMapper">
    <select id="selectPerson" parameterType="int" resultType="Person">
        select * from Person where id = #{id}
    </select>
</mapper>

SELECT文では以下のように実行する。

Person person = (Person) session.selectOne("org.mybatis.example.PersonMapper.selectPerson", 201);

マッパーでは以下のように記載する。

PersonMapper mapper = session.getMapper(PersonMapper.class);
Person person = mapper.selectBlog(201);

7. まとめ

今回の記事作成を通して、よりMyBatisを知る機会になりました。

MyBatisは学習コストも低く、データベースとのやりとりが簡単になる便利なフレームワークだということがわかりました。

この記事を読んだ方が少しでもMyBatisについて理解していただけたら幸いです。