MyBatis 3 サンプルコード (Java/MySQL/Gradle)
[履歴] [最終更新] (2017/04/14 21:48:54)

概要

MyBatis は、こちらのページに記載の JDBC を直接利用せずに、XML ファイル等で用意した SQL 文を利用して DB にアクセスするための Java ライブラリです。内部的には JDBC が利用されているため、JDBC のインストールは必要です。同様のライブラリに Hibernate ORM があります。DB は特に MySQL を対象として、MyBatis バージョン 3 の簡単なサンプルコードをまとめます。

インストール

ここでは特にビルドツール Gradle を利用したインストールを行います。Maven などの場合も手順は同様です。MyBatis バージョンは、こちらのページに記載されています。最新版は The Central Repository で確認できます。今回は org.mybatis : mybatis : 3.4.4 が該当するページです。

mkdir mybatis-demo
cd mybatis-demo
gradle init --type java-application

build.gradle

apply plugin: 'java'
apply plugin: 'application'

repositories {
    jcenter()
}

dependencies {
    compile 'org.mybatis:mybatis:3.4.4'
    compile 'mysql:mysql-connector-java:5.1.41'
    testCompile 'junit:junit:4.12'
}

mainClassName = 'org.mybatis.example.App'

以下のファイルを作成します。

mkdir -p src/main/java/org/mybatis/example
mv src/main/java/App.java src/main/java/org/mybatis/example/
mkdir -p src/test/java/org/mybatis/example
mv src/test/java/AppTest.java src/test/java/org/mybatis/example/

App.java

package org.mybatis.example;

public class App {
    public String getGreeting() {
        return "Hello world.";
    }

    public static void main(String[] args) {
        System.out.println(new App().getGreeting());
    }
}

AppTest.java

package org.mybatis.example;

import org.junit.Test;
import static org.junit.Assert.*;

public class AppTest {
    @Test public void testAppHasAGreeting() {
        App classUnderTest = new App();
        assertNotNull("app should have a greeting", classUnderTest.getGreeting());
    }
}

動作確認します。

$ ./gradlew run
...

Hello world.

必要に応じて Eclipse 等に import します。

サンプルコード

設定ファイルの作成

MyBatis 設定ファイルを作成します。DB 接続情報や、SQL を記載した XML の情報を設定します。

mkdir -p src/main/resources
touch src/main/resources/mybatis-config.xml

mybatis-config.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="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="BlogMapper.xml"/>
  </mappers>
</configuration>

SQL XML の作成

touch src/main/resources/BlogMapper.xml

BlogMapper.xml

<?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="selectId" resultType="int">
    SELECT id FROM blogs WHERE id = #{id}
  </select>
</mapper>

検証用データの登録

mysql> CREATE TABLE blogs (id INT, title VARCHAR(128));
mysql> INSERT INTO blogs VALUES (1, 'xxx'), (2, 'yyy');

実行

App.java

package org.mybatis.example;

import java.io.IOException;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class App {

    public String getGreeting() {
        return "Hello world.";
    }

    public static void main(String[] args) {

        SqlSession session = null;
        try {
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            session = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if(session != null) {
            try {
                int id = session.selectOne("org.mybatis.example.BlogMapper.selectId", 2);
                System.out.println(id);
            } finally {
                session.close();
            }
        }
    }
}

実行例

$ ./gradlew run
...

2

インターフェースを利用する場合

前述のとおり XML ファイルだけでも動作しますが、追加でインターフェースを定義すると、以下のような記法が利用できるようになります。

BlogMapper.java

package org.mybatis.example;

public interface BlogMapper {
    int selectId(int id);
}

App.java

BlogMapper mapper = session.getMapper(BlogMapper.class);
System.out.println(mapper.selectId(2));
関連ページ
    概要 こちらのページで使い方を把握した MyBatis を、こちらのページで使い方を把握した Spring Boot で利用するための基本的な設定およびサンプルコードをまとめます。サンプルコードにおいては、特に MySQL を対象とします。 MyBatis Spring-Boot-Starter チュートリアル