Maven 플러그인을 통한 코드 자동생성(Code Generator)
DTO 자동생성 플러그인 검토자료 (초안 - 작성중)
#1 첫번째 대상으로 jooq-codegen-maven을 적용
참고자료 https://www.jooq.org/doc/3.0/manual/code-generation/codegen-configuration/
오픈소스와 상용버전으로 나누어져 있는 것으로 보이며, 상용버전에 대한 로그가 비정상 동작중에 출력되어져 최종결과물은 확인하지 못하고 적용대상에서 제외함.
<plugin>
<groupid>org.jooq</groupid>
<artifactid>jooq-codegen-maven</artifactid>
<executions>
<execution>
<id>reverse-engineer</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<jdbc>
<driver>com.mysql.jdbc.Driver</driver>
<url>${jdbc.url}</url>
<user>${jdbc.username}</user>
<password>${jdbc.password}</password>
</jdbc>
<generator>
<name>org.jooq.codegen.JavaGenerator</name>
<database>
<name>org.jooq.meta.mysql.MysqlDatabase</name>
<includes>.*</includes>
<dateastimestamp>true</dateastimestamp>
<inputschema>${db.name}</inputschema>
</database>
<generate>
<deprecated>false</deprecated>
<instancefields>true</instancefields>
<pojos>true</pojos>
<records>true</records>
</generate>
<target>
<packagename>${groupId}</packagename>
<directory>src/main/java-gen</directory>
</target>
</generator>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupid>${jdbc.groupId}</groupid>
<artifactid>${jdbc.artifactId}</artifactid>
<version>${jdbc.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupid>org.hibernate</groupid>
<artifactid>hibernate-core</artifactid>
<version>5.3.7.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupid>org.hibernate</groupid>
<artifactid>hibernate-entitymanager</artifactid>
<version>5.3.7.Final</version>
</dependency>
</dependencies>
</plugin>
|
#2 두번째 대상으로 mybatis에서 제공하는 mybatis-generator-maven-plugin(MBG)
대상 DB에 Schema를 통해 역으로 Java기반 Model, Criteria, Mapper, Sample 클래스를 자동으로 생성해 하며, SQL Mapper 파일 생성도 가능한 것으로 소개되고 있지만 Spring Boot 1.5.17.RELEASE + Mybatis 기반의 Archetype에 적용할 플러그인을 검토중이므로 자바 클래스로 생성되는 Mapper 확인으로 검토 마무리 함
Mybatis 적용시 생성된 코드를 기반으로 CRUD를 구현을 마무리 해도 될만큼 필요한 API를 모두 갖추어 생성되어진다.
코드 자동생성 Maven 명령 : mvn mybatis-generator:generate
pom.xml 설정
<project ...>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
...
</project>
|
DB연동 설정은 별도의 xml 설정파일을 준비한다.
<?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="/Program Files/IBM/SQLLIB/java/db2java.zip" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
connectionURL="jdbc:db2:TEST"
userId="db2admin"
password="db2admin">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="test.model" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="test.xml" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
pom.xml에서 configurationFile 설정값을 변경하지 않으면 generatorConfig 파일은 아래와 같이 존재해야 한다. ${basedir}/src/main/resources/generatorConfig.xml
위 예시 generatorConfig.xml을 적용하는 DB와 Schema정보를 확인하고 적용하면 된다.
|
#3 세번째 대상은 hibernate ORM을 적용할때 고려할 수 있는 hibernate3-maven-plugin
참고사이트
https://stackoverflow.com/questions/1900234/maven-java-source-code-generation-for-hibernate
pom.xml 적용방법
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>hbm2java</goal>
</goals>
</execution>
</executions>
<configuration>
<components>
<component>
<name>hbm2java</name>
<implementation>configuration</implementation>
<outputDirectory>target/generated-sources/hibernate3</outputDirectory>
</component>
</components>
<componentProperties>
<drop>true</drop>
<jdk5>true</jdk5>
<configurationfile>/src/main/resources/hibernate.cfg.xml</configurationfile>
</componentProperties>
</configuration>
</plugin> |
hibernate.cfg.xml 예시
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
<property name="connection.url">jdbc:derby://localhost:1527/mydatabase</property>
<property name="connection.username">app</property>
<property name="connection.password">app</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.DerbyDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Mapping files -->
<mapping resource="Person.hbm.xml" />
</session-factory>
</hibernate-configuration> |