myBatisってものをいじることになった

会社のプロジェクトでmyBatisってものをいじることになった。とりあえず、サンプルを作ってみることにした。

英語は読めないので(って、威張るな)、日本語の資料を探していたらようやく発見。id:absj31iBATIS2/iBATIS3/mybatis初期環境構築 - Shinya’s Daily Reportって記事。これを参考に色々やってみる。

DBはお手軽なderby。必要な外部ライブラリはmybatis-3.0.2.jar、derby.jar、derbyclient.jar。derby.jarは不要かも。適当に落としてきたらいいかと。

テーブルは簡単に

CREATE TABLE APP.automobiles (
    id INT NOT NULL,
    make VARCHAR(255) NOT NULL,
    model VARCHAR(255) NOT NULL,
    model_year INT NOT NULL
);

として作成。テーブルに合わせたクラスを作成。

package miyohide;

public class Automobile {
    private int id;
    private String make;
    private String model;
    private int year;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getMake() {
        return make;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public Automobile() {
        super();
    }

    public Automobile( int id, String make, String model,int year) {
        super();
        this.id = id;
        this.make = make;
        this.model = model;
        this.year = year;
    }

    @Override
    public String toString() {
        return "Automobile{" + "id=" + id + ",make=" + make + ",model=" + model + ",year=" + year + '}';
    }

}

個人的にはまったのは、

public Automobile(){super();}

を書かずにいた点。これ、書かないとあとで面倒臭いことに。

実行するソースはこちら。

package miyohide;

import java.io.*;

import org.apache.ibatis.io.*;
import org.apache.ibatis.session.*;
import java.util.*;

public class selectMain {
    public static void main(String[] args) throws Exception {
        Reader reader = Resources.getResourceAsReader("myBatisConfig.xml");
        SqlSession session = new SqlSessionFactoryBuilder().build(reader).openSession();
        Automobile sample1 = (Automobile)session.selectOne("select", 1);
        System.out.println(sample1);
        // List
        List<Automobile> sample2 = (List<Automobile>)session.selectList("select_all");
        for (Automobile a : sample2) {
            System.out.println("a = [" + a + "]");
        }
        // Insert
        Automobile insert_data = new Automobile(100,"bbb" , "foo" , 19790114);
        session.insert("insert", insert_data);

        session.commit();
    }

}

後は設定ファイル。

<?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>
    <typeAliases>
        <typeAlias
        	type="miyohide.Automobile"
            alias="Automobile" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="org.apache.derby.jdbc.ClientDriver" />
                <property name="url" value="jdbc:derby://localhost:1527/mybatissample" />
				<property name="username" value="samplesamplesample"/>
				<property name="password" value="samplesamplesample"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="./mapping.xml" />
    </mappers>
</configuration>

実際にSQL文を書くのはまた別の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="miyohide.myBatisSample">
	<resultMap type="Automobile" id="automobileResult">
		<result column="id" property="id" />
		<result column="make" property="make" />
		<result column="model" property="model" />
		<result column="model_year" property="year" />
	</resultMap>
	<select id="select" parameterType="int" resultType="Automobile"
		resultMap="automobileResult">
		select * from
		APP.automobiles where id = #{id}
    </select>
	<select id="select_all" resultType="Automobile"
		resultMap="automobileResult">
		select * from
		APP.automobiles
    </select>
	<insert id="insert" parameterType="Automobile">
		insert into APP.automobiles (id,
		model, make, model_year)
		values (#{id}, #{model}, #{make}, #{year})
    </insert>
	<delete id="delete" parameterType="int">
		delete from APP.automobiles where
		id = #{id}
  </delete>
	<delete id="deleteAll">
		delete from APP.automobiles
  </delete>
</mapper>

これで準備は完了。後は動かすだけ。データは適当なものが入っていると思ってください。

run:
Automobile{id=1,make=20101017,model=hogehoge,year=2010}
a = [Automobile{id=1,make=20101017,model=hogehoge,year=2010}]
a = [Automobile{id=2,make=aaa,model=gebageba,year=2011}]
a = [Automobile{id=100,make=bbb,model=foo,year=19790114}]
構築成功 (合計時間: 1 秒)

か、完璧だ。

詳しい説明はあとで書くかもしれん。