コードジェネレーター

MyBatisも以前のiBatisと同様にコードジェネレーターがあります。
少し、名前が違いますが、設定的には、以前とだいたい同じ設定内容です。
また、生成されるクラス名も若干違いますが、内容的には、ほぼ同じです。
今回は、検証用として、DBには、MySQLを使います。
準備ですが、MyBatisのライブラリとコードジェネレータのライブラリを下記のサイトからダウンロードします。
http://www.mybatis.org/java.html
また、MySQLのJDDBCドライバーが必要になるので、それも下記のサイトからダウンロードします。
http://dev.mysql.com/downloads/connector/j/
それと、Eclipse上で、Antを使ってコードジェネレーターを使うことにします。
EclipseJavaプロジェクトの構成は、下記の構成とします。

dao
 |-src
 |-gen
 |  |-config
 |     |-generatorConfig.xml
 |  |-src
 |-lib
 |  |-mybatis-3.0.5.jar
 |  |-mybatis-generator-core-1.3.1.jar
 |  |-mysql-connector-java-5.1.16-bin.jar
 |-build.xml
 |-build.properties

まずAnt用のプロパティを定義するプロパティ用のファイル(build.properties)を作成して、
下記の内容を定義します。

# ソースディレクトリ
src.dir=src
# ジェネレーター用ディレクトリ
gen.dir=gen
# ジェネレーターにより生成されたソース格納ディレクトリ
gen.src.dir=gen/src
# ライブラリ格納用ディレクトリ
build.lib.dir=lib
# DAOパッケージ
persistence.package=com.chronos.core.system.persistence
# DB接続情報
dbconnection.driver=com.mysql.jdbc.Driver
dbconnection.url=jdbc:mysql://localhost:3306/developer
dbconnection.username=chronos
dbconnection.password=*******

上記のファイルをAntで利用するため、Antファイル(build.xml)に下記の定義を追加します。

<property file="build.properties"/>

Antからコードジェネレーターを使うには、AntTaskの登録をする必要があります。
AntへのAntTaskを登録するには、Antファイル(build.xml)に下記の定義を追加します。

<path id="classpath">
	<fileset dir="${build.lib.dir}">
		<include name="*.jar"/>
	</fileset>
</path>
<taskdef name="mbgenerator" 
	classname="org.mybatis.generator.ant.GeneratorAntTask">
	<classpath refid="classpath"/>
</taskdef>

次に、コードジェネレーターを実行するターゲットAntファイル(build.xml)に定義します。
定義する内容は、下記の内容になります。

<target name="mbgenerator">
	<mbgenerator overwrite="true" 
		configfile="${gen.dir}/config/generatorConfig.xml" verbose="false">
		<propertyset>
			<propertyref name="dbconnection.driver"/>
			<propertyref name="dbconnection.url"/>
			<propertyref name="dbconnection.username"/>
			<propertyref name="dbconnection.password"/>
			<propertyref name="persistence.package"/>
			<propertyref name="gen.src.dir"/>
			<propertyref name="build.lib.dir"/>
		</propertyset>
	</mbgenerator>
</target>

これで、Antの定義は、完了です。
最後に、MyBatisコードジェネレーターに読ませる設定ファイルを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
	PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
	"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
	<classPathEntry location="${build.lib.dir}/mysql-connector-java-5.1.16-bin.jar"/>
	<context id="MySQL" targetRuntime="MyBatis3">
		<jdbcConnection
			driverClass="${dbconnection.driver}"
			connectionURL="${dbconnection.url}"
			userId="${dbconnection.username}"
			password="${dbconnection.password}">
		</jdbcConnection>
		<javaTypeResolver />
		<javaModelGenerator 
			targetPackage="${persistence.package}.base.entity" 
			targetProject="${gen.src.dir}">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		<javaClientGenerator 
			type="ANNOTATEDMAPPER" 
			targetPackage="${persistence.package}.base.dao" 
			targetProject="${gen.src.dir}">
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>
		<table tableName="ITEM"
			enableInsert="true"
			enableSelectByPrimaryKey="true"
			enableSelectByExample="ture"
			enableUpdateByPrimaryKey="true"
			enableDeleteByPrimaryKey="true"
			enableDeleteByExample="false"
			enableCountByExample="false"
			enableUpdateByExample="false"
			selectByPrimaryKeyQueryId="false"
			selectByExampleQueryId="false"
			modelType="hierarchical">
			<property name="constructorBased" value="false"/>
		</table>
	</context>
</generatorConfiguration>

ちなみに、上記の設定では、以前のSqlMapファイルは、生成されません。
MyBatisからアノテーションが追加されているので、SqlMapの定義自体は、アノテーションで定義されています。
名前はSqlMapではないですが、以前と同様にXMLを使いたい場合は、javaClientGeneratorのtypeの変更と
sqlMapGeneratorの定義を追加すればXMLファイルを生成することが可能です。

<sqlMapGenerator 
	targetPackage="${persistence.package}.base.dao.mapper" 
	targetProject="${gen.src.dir}
	<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator 
	type="XMLMAPPER" 
	targetPackage="${persistence.package}.base.dao" 
	targetProject="${gen.src.dir}">
	<property name="enableSubPackages" value="true" />
</javaClientGenerator>

また、多分、iBatisとの互換性?を考慮しているのか、MyBatisには、iBatis2関連のものも一緒になっているぽいです。
その為、iBatis2用のオプションもあります。
CONTEXTの箇所のランタイムをIbatis2Java5とします。

<context id="MySQL" targetRuntime="Ibatis2Java5">

あとは、javaClientGeneratorのtypeを変更します。

<javaClientGenerator 
	type="IBATIS" 
	targetPackage="${persistence.package}.base.dao" 
	targetProject="${gen.src.dir}">
	<property name="enableSubPackages" value="true" />
</javaClientGenerator>

タイプは、上記以外に、GENERIC-CI/GENERIC-SI/SPRINGがあります。
個人的には、MyBatisの方を使った方がいいかなと思います。
iBatis2の方式での生成もできますが、いつまで、引き継がれるかわからないので。
あ!でもオープンソースなので、また戻ったりするかも?
次は、Springとの連携を書こうかなと思います。