聞いたことはあるけどよく知らないMyBatisにちょっと近づいてみる

http://www.mybatis.org/images/mybatis-logo.png

MyBatisは、O/Rマッパーです。

O/Rマッパーっていうのはオブジェクト指向のプログラムとリレーショナルデータベースをつなげてくれます。

O/RマッパーはObject/Relationalマッパーの略で、オブジェクト指向のプログラムと、RDBをライブラリで橋渡ししようという考え方です。
cfm-art.sakura.ne.jp

https://thinkit.co.jp/images/article/0606/13/1/2.gif
thinkit.co.jp

ということでMyBatisは、リレーショナルデータベースとJavaプログラムを手軽につなげてくれるフレームワークです。

MyBatis はカスタム SQL、ストアドプロシージャ、高度なマッピング処理に対応した優れた永続化フレームワークです。 MyBatisを使うことで、直接 JDBC を扱うコードを書いたり、クエリ引数やクエリ結果を手動で設定する必要がほとんどなくなります。 MyBatis の設定やデータベースレコードと Java オブジェクトの関連付けは、XML またはアノテーションを使って行うことができます。
MyBatis – MyBatis 3 | イントロダクション

JDBCは、リレーショナルデータベースにアクセスするための標準Java APIです。

Java Database Connectivityの省略という噂はありますがホントの名称はわからないっぽいです。
JDBCを使って「データベースへの接続」「SQLの実行」「データベースからの結果取得」ができます。

http://image.itmedia.co.jp/ait/articles/0106/26/r5fig1.gif
http://image.itmedia.co.jp/ait/articles/0106/26/r5fig3.gif
JDBCとは何か?:Javaデータアクセスの基礎(1) - @IT

http://www.atmarkit.co.jp/fjava/javafaq/jdbc/jdbc1.gif
Java Solution FAQ:JDBCとは何でしょうか?

このJDBCを直接使うよりもMyBatisをJDBCの手前に置いて使うほうがカンタンにデータベースとプログラムをつなげることができます。

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatis3Scope.png
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation

設定やSQLXMLに書けばMyBatisが頑張ってくれます。

XML 形式の設定ファイルを使って SqlSessionFactory を生成する
XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。
XML 形式の設定ファイルの詳細については後ほど改めて説明しますが、ここでは簡単なサンプルを挙げておきます。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

Mapped SQL Statements について
以下は、先ほどの例で SqlSession のメソッドを呼び出したときに実行されることを想定した XML ベースの Mapped Statement です。

<?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.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

BloggerMapper のような Mapper クラスなら、実は XML を使う必要はありません。 代わりに、Java アノテーションを使って下記のように Mapped Statement を記述することができます。

public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

MyBatis – MyBatis 3 | スタートガイド

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatis3RelationshipOfComponents.png
https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatisSpringRelationshipOfComponents.png
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation

Eclipseを使う場合の便利なプラグイン

MyBatis Generatorは、オブジェクトを自動生成してくれます。

f:id:ponsuke_tarou:20210118153209p:plain
Eclipse Marketplaceで検索すると出てきます

  1. 構成ファイルを作成する
  2. [実行] > [実行構成] > [MyBatis Generator] > 構成ファイルを選択 > 実行

MyBatisでエラーになって困った事例集

qiita.com