会社のプロジェクトでmyBatisってものをいじることになった。とりあえず、サンプルを作ってみることにした。
英語は読めないので(って、威張るな)、日本語の資料を探していたらようやく発見。id:absj31のiBATIS2/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>
<?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 秒)
か、完璧だ。
詳しい説明はあとで書くかもしれん。