.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. Java
  5. MyBatisを利用するコツ12個とは?MyBatisのメリットも解説

MyBatisを利用するコツ12個とは?MyBatisのメリットも解説

  • Java
  • SQL
  • データベース
  • プログラミング言語
  • 開発環境(IDE)
公開日時:   更新日時:
MyBatisを利用するコツ12個とは?MyBatisのメリットも解説
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    システム
    エンジニア
    MyBatisを利用するコツには、どのようなものがあるでしょうか?

    プロジェクト
    マネージャー
    MyBatisを利用するコツは複数あるので、詳しくご紹介していきましょう。

    MyBatisとはどんなフレームワーク?


    MyBatisは、オブジェクト指向マッピングでデータベースへのアクセスをコントロールする永続化フレームワークで、カスタムSQL、ストアドプロシージャや高度なマッピング処理などに対応しています。MyBatisを利用すると、Javaでデータベースのアクセス時に行うコーディングやクエリに関する記述をサポートしてくれて、個々に記述する必要がなくなります。オブジェクト指向アプリケーション開発で、リレーショナルデータベースを扱う場合に、実装を容易にできます。

    MyBatisを利用するために事前準備は必要?


    チェックルールなのでほとんど検証環境に依存しませんが、Java(1.8.0_131)、PostgreSQL(9.3)、MyBatis3(3.4.2)、mybatis-spring(1.3.1)、Spring Framework(4.3.5)をダウンロードしておくと良いです。

    MyBatisを利用するコツ12個


    Mybatisとは、同じオブジェクト指向マッピングのHibernateと違って、設定ファイルの中でSQL文を記述するタイプのORMフレームワークです。MyBatisではSQLコーディングができるため、開発の手数は増えてしまいますが、クエリのチューニングなどはやりやすく、カスタマイズして性能を追求する場合にはおすすめです。ここでは、MyBatisを利用するにあたって、より効率を上げられるやり方、ほかのフレームワークと異なる点などについて、使う際のコツをご紹介します。

    利用するコツ1:Mapperファイルの扱い方

    MyBatisで設定するMapperファイルでは、その各々の要素の中で多くの機能を実現しており、ここをうまく扱うのがJavaプログラミングの効率を上げるコツです。Mapperファイルのステートメントとパラメータをうまく設定することで、クエリ引数やクエリ結果の取得について、記述を1割程度に抑えることができます。Mapperファイルの扱いについては、インターフェースと同一パッケージに配置する、ファイル名の付け方やインターフェースとの紐付けの仕方などいくつかのコツがありますので、ご紹介します。

    インターフェースに対応しているか確認

    MyBatisでは、mapperファイルがインターフェースに対応していない場合、エラーになります。インターフェースに対応するmapperファイルが見つからない場合は、初期化する段階でエラーになるので、アプリケーションが起動できません。mapperファイルが存在しないとエラーになりますが、逆にインターフェースが存在しない場合はエラーになりません。

    インターフェースとの紐付け方

    MyBatisで、インターフェースとMapperファイルを紐づける場合は、Namespace属性でインターフェースのFQCNを指定することで紐づけることができます。FQCNは、異なるクラスのパッケージを紐づける場合に使用するクラス名です。クラス名の先頭にパッケージをつけることで、完全限定クラス名(Fully qualified class name)として使えます。

    インターフェースと同一パッケージに配置

    MyBatisでMapperファイルを読み込む場合には、インターフェースと同じパッケージになるように配置するのがお勧めです。ほかにもMyBatisでMapperファイルを読み込む方法はありますが、同じパッケージに配置するのが一番簡単で、間違いのないやり方です。

    インターフェースと同一のファイル名で作成

    MyBatisでインターフェースとMapperファイルの関係がわかるようにするため、インターフェースとMapperファイルは同じファイル名で作成します。ただし、同じファイル名にしても紐付けされるわけではなく、実際の紐づけはNamespace属性でインターフェースのFQCNを指定することで行われます。

    利用するコツ2:メソッドとSQLを紐付け方

    MyBatisでメソッドとSQLを紐づけるには、CRUDに対応したXMLタグで、id属性にインターフェースのメソッド名を指定すれば可能です。インターフェースのメソッドとSQLが紐づけられていれば、メソッドが呼び出された時に指定したSQLが実行されます。

    利用するコツ3:引数データ型の特定方法

    MyBatisで、引数データ型を特定するには、引数が1つの場合と複数の場合で変わってきます。引数のデータ型は、FQCNかタイプエイリアスを使用する場合は、エイリアスで指定でき、記述量を減らすことができます。汎用のJavaタイプには、事前にエイリアスが設定されていますが、プリミティブ型の場合は表記が特殊になります。引数が一つの場合と、複数の場合について説明します。

    利用するコツ4:メソッド引数が1つの場合

    MyBatisで、メソッド引数が一つの場合に引数のデータ型を特定するためには、parameterType属性に引数のデータ型を指定することで実現できます。記入するデータ型はエイリアスを使用することができるため、記述の量を減らすことができます。

    利用するコツ5:メソッドの引数が複数の場合

    MyBatisでメソッドの引数が複数ある場合、それぞれの引数のデータ型は異なる可能性があります。MyBatisでメソッドの引数が2つ以上ある場合は、どのparameterType属性にどの引数が対応するのかわからないので、parameterType属性は指定しないでください。

    利用するコツ6:検索(READ)のSQLの指定方法

    MyBatisで、検索(Read)でSQLを指定するには、戻り値のデータ型の特定が必要なので、resultType属性に戻り値のデータを指定してください。resultType属性は、登録(Create)、更新(Update)、削除(Delete)に関しては指定しないでください。

    利用するコツ7:複雑なマッピングが必要なときは?

    MyBatisで複雑なマッピングを行いたい場合は、resultMap属性に別に定義している要素のid属性を指定してください。MyBatisでは、標準の状態で一般的なマッピングは自動で行われますが、それ以外のデータマッピングを行いたい場合や、ネストしたクラスに戻り値をマッピングしたい場合、1対多のコレクションを同時にマッピングするような場合はresultMap属性を使用します。

    利用するコツ8:resultType属性に戻り値のデータ型を指定

    MyBatisでresultType属性に戻り値のデータを指定するのは、検索(Read)のSQLで戻り値のデータ型を特定したい場合です。検索(Read)以外の登録(Create)や更新(Update)、削除(Delete)の場合には、ResiltType属性は指定しません。また、複雑なマッピングを行う場合はresultMap属性を指定しますが、その場合はresultType属性は指定しません。両方とも記述された場合は、resultMap属性が優先されます。

    利用するコツ9:インターフェースのメソッドの戻り値の設定方法

    MyBatisでインターフェースのメソッドの戻り値を設定する場合は、検索(Read)のSQLのならresultTypeで戻り値を設定し、複雑なマッピングが必要な場合は、resultMap属性で戻り値のデータ型を設定します。戻り値を指定する時に、resultType属性とresultMap属性は同時に使用することはできません。

    利用するコツ10:戻り値指定で同時に利用しない方が良い属性

    MyBatisで戻り値を得るには、resultType属性かresultMap属性を使用しますが、この二つは同時に利用することはできません。通常はresultType属性を利用し、resultType属性では対応できない場合にresultMap属性を使用します。resultType属性とresultMap属性を同時に設定してしまった場合は、resultMap属性で指定された内容が優先されます。

    利用するコツ11:メソッド引数における付与方法

    MyBatisにおいて、メソッド引数が複数の場合、読みやすさと保守性を考えて、@Paramアノテーションを引数に付与しましょう。メソッド引数が複数の場合は、@Paramアノテーションを付与した方がわかりやすくなるのですが、メソッド引数が一つの場合は、Mapperファイルの記述で間違いが起こる可能性もあるので、@Paramアノテーションを付与しないのがお勧めです。

    利用するコツ12:「>」や「<」はエスケープ処理をする

    MyBatisで使用するMapperファイルはXMLファイルなので、「>」や「<」を使用する場合はエスケープ処理が必要です。XMLファイルでは、タグの記述に「>」や「<」を使用するので、「>」や「<」を別の文字列に置き換えて記述するのですが、これがエスケープ処理です。「>」を表示する場合には「>」を、「<」を表示する場合には「<」という文字列で記述すれば、Mapperファイルの中で「>」や「<」を利用することができます。

    MyBatisのメリット


    MyBatisという永続化フレームワークは、ストアドプロシージャや高度なマッピング処理に対応しており、コードの記述やクエリ引数やクエリ結果の取得を自動化して、大幅に開発工数を削減することができます。ここではJDBCコードを直接書けるメリットと、クエリ引数やクエリ結果の設定の簡略化のメリットについてご紹介します。

    JDBC を扱うコードを直接記述できる

    MyBatisでは、JDBCを直接記述でき、JDBC単体で使用するよりも容易にデータベースとアプリケーションを接続することができます。JDBCは、Javaがリレーショナルデータベースにアクセスするための標準Java APIで、JDBCを使うことでデータベースへの接続やSQLの実行、データベースからの結果取得が行えます。MyBatisのXML形式の設定ファイルに含まれている基本設定には、JDBCで行う作業がすでに入っており、SqlSessionFactoryを生成します。

    クエリ引数・結果の設定の手間がない

    MyBatisのMapper XMLファイルのMapped Statementのおかげで、クエリ引数やクエリ結果の取得について、JDBCの1割ほどの記述で実現することができます。Mapper XMLファイルに設定をしておくことで、細かいコーディングをすることなくクエリ引数を設定することができ、resultMap要素を使うことでクエリ結果の取得のためのコードを9割ほど減らすことができます。必要があれば、属性を指定することで細かいステートメントの設定が可能です。

    システム
    エンジニア
    MyBatisを利用することで効率化が期待できるのですね。

    プロジェクト
    マネージャー
    そうですね。より短時間で品質の高いアプリケーションの作成を目指しましょう!

    MyBatisを使いこなして転職を成功させよう


    MyBatisはJavaでリレーショナルデータベースを利用する手順を大幅に効率化できるため今までよりも短時間で、品質の高いJavaアプリケーションを作成できます。

    効率化は転職のときのアピールに有効な技術になります。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Java新着案件New Job