Doma2のgenで自動生成を行う
Doma2
ORマッパーらしい
SQLファイルとか書いてなんかできるらしいよ
今回やること
Doma2でDBを参照していい感じのエンティティとかを作成できるらしいので準備して見る。
ライブラリ
doma2
doma2-gen
freemarker
mysl
設定
プロジェクトを作成する
ライブラリを指定の場所へ配置しておく
設定ファイル編集
doma-gen-build.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="doma-gen-example" default="gen" basedir="."> <!-- javaDestDir --> <property name="javaDestDir" value="src"/> <!-- sqlDestDir --> <property name="sqlDestDir" value="src"/> <!-- dialectName --> <property name="dialectName" value="mysql"/> <!-- driverClassName --> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.33.10:3306/myapp"/> <property name="user" value="app"/> <property name="password" value="Password123@"/> <!-- package --> <property name="entityPackageName" value="com.example.mshige1979.server.db.entity"/> <property name="daoPackageName" value="com.example.mshige1979.server.db.dao"/> <property name="configClassName" value="com.example.mshige1979.server.db.config.AppConfig"/> <property name="sqlTestClassName" value="com.example.mshige1979.server.db.SqlTest"/> <property name="sqlFilePattern" value="META-INF/**/*.sql"/> <path id="classpath"> <fileset dir="WEB-INF/lib" includes="*.jar"/> </path> <taskdef name="gen" classname="org.seasar.doma.extension.gen.task.Gen" classpathref="classpath" loaderref="loader"/> <typedef name="entityConfig" classname="org.seasar.doma.extension.gen.task.EntityConfig" loaderref="loader"/> <typedef name="daoConfig" classname="org.seasar.doma.extension.gen.task.DaoConfig" loaderref="loader"/> <typedef name="sqlConfig" classname="org.seasar.doma.extension.gen.task.SqlConfig" loaderref="loader"/> <target name="gen"> <gen dialectName="${dialectName}" driverClassName="${driverClassName}" url="${url}" user="${user}" password="${password}"> <entityConfig destdir="${javaDestDir}" packageName="${entityPackageName}" /> <daoConfig destdir="${javaDestDir}" packageName="${daoPackageName}" configClassName="${configClassName}" /> <sqlConfig destdir="${sqlDestDir}" /> </gen> </target> <target name="genTest"> <genTest dialectName="${dialectName}" driverClassName="${driverClassName}" url="${url}" user="${user}" password="${password}"> <sqlTestConfig destdir="${javaDestDir}" testClassName="${sqlTestClassName}"> <fileset dir="${sqlDestDir}"> <include name="${sqlFilePattern}"/> </fileset> </sqlTestConfig> </genTest> </target> </project>
実行する
↓
Buildfile: sample_spring_doma2a/doma-gen-build.xml gen: [gen] [DOMAGEN0017] 方言にはクラス[org.seasar.doma.extension.gen.dialect.MysqlGenDialect]が使用されます。 [gen] Wed Dec 21 00:17:40 JST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. [gen] [DOMAGEN0020] ファイルを上書きしました。/Users/matsumotoshigeharu/Documents/workspace/sample_spring_doma2a/src/com/example/mshige1979/server/db/entity/Item.java [gen] [DOMAGEN0020] ファイルを上書きしました。/Users/matsumotoshigeharu/Documents/workspace/sample_spring_doma2a/src/META-INF/com/example/mshige1979/server/db/dao/ItemDao/selectById.sql [gen] [DOMAGEN0020] ファイルを上書きしました。/Users/matsumotoshigeharu/Documents/workspace/sample_spring_doma2a/src/com/example/mshige1979/server/db/entity/Memo.java [gen] [DOMAGEN0020] ファイルを上書きしました。/Users/matsumotoshigeharu/Documents/workspace/sample_spring_doma2a/src/META-INF/com/example/mshige1979/server/db/dao/MemoDao/selectById.sql [gen] [DOMAGEN0020] ファイルを上書きしました。/Users/matsumotoshigeharu/Documents/workspace/sample_spring_doma2a/src/com/example/mshige1979/server/db/entity/ObjData.java [gen] [DOMAGEN0020] ファイルを上書きしました。/Users/matsumotoshigeharu/Documents/workspace/sample_spring_doma2a/src/META-INF/com/example/mshige1979/server/db/dao/ObjDataDao/selectById.sql BUILD SUCCESSFUL Total time: 1 second
できたもの(一部)
ItemDao.java
package com.example.mshige1979.server.db.dao; import com.example.mshige1979.server.db.config.AppConfig; import com.example.mshige1979.server.db.entity.Item; import org.seasar.doma.Dao; import org.seasar.doma.Delete; import org.seasar.doma.Insert; import org.seasar.doma.Select; import org.seasar.doma.Update; /** */ @Dao(config = AppConfig.class) public interface ItemDao { /** * @param id * @return the Item entity */ @Select Item selectById(Integer id); /** * @param entity * @return affected rows */ @Insert int insert(Item entity); /** * @param entity * @return affected rows */ @Update int update(Item entity); /** * @param entity * @return affected rows */ @Delete int delete(Item entity); }
Item.java
package com.example.mshige1979.server.db.entity; import java.time.LocalDateTime; import org.seasar.doma.Column; import org.seasar.doma.Entity; import org.seasar.doma.GeneratedValue; import org.seasar.doma.GenerationType; import org.seasar.doma.Id; import org.seasar.doma.Table; /** * */ @Entity(listener = ItemListener.class) @Table(name = "item") public class Item { /** */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") Integer id; /** */ @Column(name = "name") String name; /** */ @Column(name = "price") Integer price; /** */ @Column(name = "create_at") LocalDateTime createAt; /** */ @Column(name = "update_at") LocalDateTime updateAt; /** * Returns the id. * * @return the id */ public Integer getId() { return id; } /** * Sets the id. * * @param id the id */ public void setId(Integer id) { this.id = id; } /** * Returns the name. * * @return the name */ public String getName() { return name; } /** * Sets the name. * * @param name the name */ public void setName(String name) { this.name = name; } /** * Returns the price. * * @return the price */ public Integer getPrice() { return price; } /** * Sets the price. * * @param price the price */ public void setPrice(Integer price) { this.price = price; } /** * Returns the createAt. * * @return the createAt */ public LocalDateTime getCreateAt() { return createAt; } /** * Sets the createAt. * * @param createAt the createAt */ public void setCreateAt(LocalDateTime createAt) { this.createAt = createAt; } /** * Returns the updateAt. * * @return the updateAt */ public LocalDateTime getUpdateAt() { return updateAt; } /** * Sets the updateAt. * * @param updateAt the updateAt */ public void setUpdateAt(LocalDateTime updateAt) { this.updateAt = updateAt; } }