Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

iBatisとSpringを連携する

iBatisはMyBatisと名前が変わり、ApacheからGoogle Codeへ移ってる。

# なんでだろう??知っている人いますか??

MyBatisは3.0.1がリリースされているけど、2010/06/01現在Springからは連携するパッケージが出ていないため、SpringとMyBatisのくみあわせはできない。

iBatisと連携することにして、それならSpringリファレンスにあるとおりの手順でできる。


で、iBatisを使うときに、ibatorという自動生成ツールを使うと便利だ。

eclipseのプラグインがあり、update siteは以下。なお、スタンドアロンでJARから利用できる。

http://ibatis.apache.org/tools/ibator

MyBatisでもMyBatis Generatorとして開発中のようだ。

要はiBatisの設定ファイルとエンティティクラス、さらにDAOのインタフェースと実装クラスを生成するライブラリで、

自動生成設定ファイルを記述する。

eclipseのFile -> New -> Apache iBATIS Ibator Configuration Fileとすると雛形ができる。

この設定ファイルを右クリックしてGenerate iBATIS Artifactsを選択すると、自動生成される。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ibatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN" "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd" >
<ibatorConfiguration>
	<classPathEntry
		location="JDBCドライバのJARへのパス" />

	<ibatorContext id="mycatalog" targetRuntime="Ibatis2Java5"
		defaultModelType="flat">

		<ibatorPlugin type="org.apache.ibatis.ibator.plugins.SerializablePlugin" />
		<ibatorPlugin type="org.apache.ibatis.ibator.plugins.EqualsHashCodePlugin" />
		<ibatorPlugin type="org.apache.ibatis.ibator.plugins.SqlMapConfigPlugin">
			<property name="targetPackage" value="xxx" />
			<property name="targetProject" value="xxx" />
		</ibatorPlugin>

		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/xxx" userId="xxx"
			password="xxx">
		</jdbcConnection>

		<javaTypeResolver>
			<property name="forceBigDecimals" value="true" />
		</javaTypeResolver>

		<javaModelGenerator targetPackage="xxx"
			targetProject="xxx">

			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		<sqlMapGenerator targetPackage="xxx"
			targetProject="xxx" />
		<daoGenerator targetPackage="xxx"
			targetProject="xxx" type="SPRING" implementationPackage="xxx">
			<property name="methodNameCalculator" value="default" />
		</daoGenerator>

		<table schema="xxx" tableName="xxx" domainObjectName="xxx"
			enableDeleteByExample="false" enableCountByExample="false"
			enableUpdateByExample="false" selectByExampleQueryId="false"
			enableSelectByExample="false">
			<generatedKey column="id" sqlStatement="MySQL" identity="true" />
			<ignoreColumn column="updateTimestamp" />
		</table>

	</ibatorContext>
</ibatorConfiguration>

targetRuntime属性を設定しなければ、JDK 1.5以前のソースが生成される。Genericsを使うソースを生成したいときはtargetRuntime="Ibatis2Java5"を指定する。


SerializablePluginとEqualsHashCodePluginを指定すると、エンティティクラスがSerializableをインプリメントし、hashCode()とequals()を自動生成する。


javaModelGeneratorのtrimStringsプロパティをtrueにすると、エンティティのsetterメソッドでtrimされる。


daoGeneratorはDAOを生成する。type="SPRING"とするとSpringのSqlMapClientDaoSupportを継承したDAO実装クラスを生成する。


methodNameCalculatorが不明。value="extended"って何するの??


tableのgeneratedKeyで「sqlStatement="MySQL" identity="true"」とすればMySQLのオートインクリメントを使ったキー生成を利用できる。