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>
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));