--- title: Spring Rooのリバースエンジニアリング機能でリッチなCRUDアプリを自動生成 tags: [] categories: ["Programming", "Java", "org", "springframework", "roo"] date: 2011-11-15T18:40:02Z updated: 2011-11-15T18:40:02Z --- Spring Rooで既存のDBからJPAエンティティを生成し、CRUDアプリをGWTで作成する
※ 1.2系じゃないと↓は動きません 使うテーブルはよくあるやつ。MySQLを使用する。 mysql> desc address; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | ID | int(11) | NO | PRI | NULL | | | STREET | varchar(20) | NO | | NULL | | | CITY | varchar(10) | NO | | NULL | | | VERSION | int(11) | NO | | NULL | | +---------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> desc department; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | ID | int(11) | NO | PRI | NULL | | | NAME | varchar(10) | NO | UNI | NULL | | | LOCATION | varchar(10) | NO | | NULL | | | VERSION | int(11) | NO | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> desc employee; +---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | ID | int(11) | NO | PRI | NULL | | | DEPARTMENT_ID | int(11) | NO | MUL | NULL | | | ADDRESS_ID | int(11) | NO | UNI | NULL | | | NAME | varchar(10) | NO | | NULL | | | AGE | int(11) | NO | | NULL | | | VERSION | int(11) | NO | | NULL | | +---------------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) 今回はリモートのMySQLサーバー(ユーザー名:root、パスワードなし、データベース名:example)につなぎにいってみる。 $ roo.sh roo> project --topLevelPackage am.ik.crud roo> jpa setup --provider HIBERNATE --database MYSQL --hostName MySQLサーバーのIP --userName root --databaseName example リバースエンジニアリングのコマンドは以下である。 roo> database reverse engineer --schema example --package ~.model --testAutomatically 初回実行すると roo> database reverse engineer --schema example --package ~.model --testAutomatically Located add-on that may offer this JDBC driver 1 found, sorted by rank; T = trusted developer; R = Roo 1.2 compatible ID T R DESCRIPTION ------------------------------------------------------------- 01 Y Y 5.1.17.0020 #jdbcdriver driverclass:com.mysql.jdbc.Driver. This... -------------------------------------------------------------------------------- [HINT] use 'addon info id --searchResultId ..' to see details about a search result [HINT] use 'addon install id --searchResultId ..' to install a specific search result, or [HINT] use 'addon install bundle --bundleSymbolicName TAB' to install a specific add-on version JDBC driver not available for 'com.mysql.jdbc.Driver' と怒られる。MySQLドライバがないらしい。suggestされるがままに roo> addon install id --searchResultId 01 Target resource(s): ------------------- Spring Roo - Wrapping - mysql-connector-java (5.1.17.0020) Required resource(s): --------------------- slf4j-api (1.6.1) slf4j-nop (1.6.1) Deploying...done. Successfully installed add-on: Spring Roo - Wrapping - mysql-connector-java [version: 5.1.17.0020] を実行してMySQLドライバをインストールする。もう一回実行すると roo> database reverse engineer --schema example --package ~.model --testAutomatically Created SRC_MAIN_RESOURCES/dbre.xml Created SRC_MAIN_JAVA/am/ik/crud/model Created SRC_MAIN_JAVA/am/ik/crud/model/Address.java Created SRC_MAIN_JAVA/am/ik/crud/model/Department.java Created SRC_MAIN_JAVA/am/ik/crud/model/Employee.java Created SRC_TEST_JAVA/am/ik/crud/model Created SRC_TEST_JAVA/am/ik/crud/model/AddressDataOnDemand.java Created SRC_TEST_JAVA/am/ik/crud/model/AddressIntegrationTest.java Created SRC_TEST_JAVA/am/ik/crud/model/DepartmentDataOnDemand.java Created SRC_TEST_JAVA/am/ik/crud/model/DepartmentIntegrationTest.java Created SRC_TEST_JAVA/am/ik/crud/model/EmployeeDataOnDemand.java Created SRC_TEST_JAVA/am/ik/crud/model/EmployeeIntegrationTest.java Created SRC_MAIN_JAVA/am/ik/crud/model/Address_Roo_Configurable.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Address_Roo_Jpa_Entity.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Address_Roo_DbManaged.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Address_Roo_ToString.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Address_Roo_Entity.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Department_Roo_Configurable.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Department_Roo_Jpa_Entity.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Department_Roo_DbManaged.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Department_Roo_ToString.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Department_Roo_Entity.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Employee_Roo_Configurable.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Employee_Roo_Jpa_Entity.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Employee_Roo_DbManaged.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Employee_Roo_ToString.aj Created SRC_MAIN_JAVA/am/ik/crud/model/Employee_Roo_Entity.aj Created SRC_TEST_JAVA/am/ik/crud/model/AddressIntegrationTest_Roo_Configurable.aj Created SRC_TEST_JAVA/am/ik/crud/model/AddressDataOnDemand_Roo_DataOnDemand.aj Created SRC_TEST_JAVA/am/ik/crud/model/AddressIntegrationTest_Roo_IntegrationTest.aj Created SRC_TEST_JAVA/am/ik/crud/model/EmployeeIntegrationTest_Roo_Configurable.aj Created SRC_TEST_JAVA/am/ik/crud/model/DepartmentDataOnDemand_Roo_DataOnDemand.aj Created SRC_TEST_JAVA/am/ik/crud/model/EmployeeDataOnDemand_Roo_DataOnDemand.aj Created SRC_TEST_JAVA/am/ik/crud/model/EmployeeIntegrationTest_Roo_IntegrationTest.aj Created SRC_TEST_JAVA/am/ik/crud/model/EmployeeDataOnDemand_Roo_Configurable.aj Created SRC_TEST_JAVA/am/ik/crud/model/AddressDataOnDemand_Roo_Configurable.aj Created SRC_TEST_JAVA/am/ik/crud/model/DepartmentDataOnDemand_Roo_Configurable.aj Created SRC_TEST_JAVA/am/ik/crud/model/DepartmentIntegrationTest_Roo_Configurable.aj Created SRC_TEST_JAVA/am/ik/crud/model/DepartmentIntegrationTest_Roo_IntegrationTest.aj 一杯生成された! あとは roo> web gwt setup roo> web gwt all --proxyPackage ~.client.proxy --requestPackage ~.client.request からの〜 $ mvn gwt:run で できた!