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