MinuteProject快速生成源码

  MinuteProject是一个能够一次性生成源码的反转工程(reverse-engineering) 工具,也就是代码生成器,它能够产生各种开源堆栈的应用代码,后端根据已经存在数据表产生的代码包括: Hibernate, JPA, JPA2, springframework. REST: JEE-jersey, CXF, springMVC.等等;前端代码包括Openxava, Grails, Play. Methodology: FitNesse.还有: vaadin, jsf-primefaces, jooq, rails等

首先,下载MinuteProject,有命令和GUI两种方式启动:

1. 在解压后的项目/bin/start-console.cmd 或start-console.sh 启动GUI,如下图:

你可以选择你使用的数据库,目前支持下面几种:Oracle; DB2; Mysql; hsqldb; derby。

填写好数据库连接,比如mysql是:jdbc:mysql://127.0.0.1:3306/test,其中 test是你建立的数据库名称,输入用户名和密码,schema是已经存在的一个数据表,MinuteProject将根据这个表结构产生相应的模型和DAO代码。

roo package是指你的代码的包名,比如com.jdon,模型名称是你的业务模型名称,比如Order或Product等等。

下面可以选择target类型,也就是你需要生成代码的类型,有如下:

  • Maven Spring Hibernate (advanced DAO)
  • Maven Spring JPA/Hibernate (advanced DAO)
  • FitNesse
  • Spring/Hibernate (standard)
  • Spring/JPA/Hibernate (standard)
  • Spring/iBatis (standard)
  • OpenXava
  • Grails
  • Play
  • JPA2
  • JSF-primefaces
  • REST-JEE
  • WS-JEE

选择产生的代码类型后,点按generate,在项目目录output下生成了代码,如果你没有发现这个目录,主要可能是你的数据库参数没有配置正确。

 

2.命令行生成代码方式

在项目的/mywork/config目录下有一个样本配置文件:mp-config-sample.xml,根据你安装的数据库配置这个配置文件,存成另外一个文件如Hello.xml,里面的mysql配置如下:

<!DOCTYPE root>

<generator-config xmlns="http://minuteproject.sf.net/xsd/mp-config"

xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"

xs:noNamespaceSchemaLocation="mp-config.xsd">

       <configuration>

              <model name="Hello" version="1.0" package-root="com.jdon.demo">

                     <data-model>

                        

                <driver name="mysql" version="5.0.5" groupId="mysql" artifactId="mysql-connector-java"></driver>                                               

                <dataSource>

                       <driverClassName>org.gjt.mm.mysql.Driver</driverClassName>

                       <url>jdbc:mysql://localhost:3306/test</url>

                       <username>banq</username>

                       <password>xxxx</password>

                </dataSource>              

                              <!-- autoincrement primary key                         -->

                            <primaryKeyPolicy>

                                   <primaryKeyPolicyPattern name="autoincrementPattern" ></primaryKeyPolicyPattern>

                            </primaryKeyPolicy>

 

                     </data-model>

                     <business-model>

                            <generation-condition>

                                   <condition type="exclude" startsWith="SYS_ADMIN"></condition>

                            </generation-condition>

                           

                            <business-package default="model">

                                   <condition type="package" startsWith="TB_" result="other"></condition>

                            </business-package>            

                           

                            <!-- Enrichment gives extra information that can be used by the template

                                    Ex: one concept such as indicating that an entity contains master data can trigger specific artifact generation on multiple level:

                                        - specific DAO,

                                        - cache configuration,

                                        - presentation navigation behaviour (access to the entity via drop down list and not classical affection Sub Use Case)

                                        - enumeration (strong typing) in some cases

                                        - sql constraint statement in some cases     

                                    Enrichment   can target entities, fields, business package

                            -->

                            <enrichment>

                                <!-- content-type enrichment -->

                                   <entity name="CATEGORY" content-type="reference-data" >

                                      <!-- TODO semantic reference -->

                                   </entity>

                                  

                                  

                                  

                                   <!-- constraining a field -->

                            </enrichment>                                  

                     </business-model>

              </model>

              <!-- change your catalog entry with one of the track -->

              <targets catalog-entry="JOOQ"/>

 

 

       </configuration>

</generator-config>

其中targets catalog-entry="JOOQ"是选择你生成代码的架构类型,这里是JOOQ。

在此目录下运行:

model-generation.cmd Hello.xml

那么在与当前config平行的目录/mywork/output下产生了代码。

例如testuser表产生的DAO接口TestuserDao代码如下:

public interface TestuserDao {

    /**

     * Inserts a Testuser entity

     * @param Testuser testuser

     */

    public void insertTestuser(Testuser testuser) ;

 

    /**

     * Inserts a list of Testuser entity

     * @param List<Testuser> testusers

     */

    public void insertTestusers(List<Testuser> testusers) ;

       

    /**

     * Updates a Testuser entity

     * @param Testuser testuser

     */

    public Testuser updateTestuser(Testuser testuser) ;

 

        /**

     * Updates a Testuser entity with only the attributes set into Testuser.

        * The primary keys are to be set for this method to operate.

        * This is a performance friendly feature, which remove the udibiquous full load and full update when an

        * update is to be done

   * Remark: The primary keys cannot be update by this methods, nor are the attributes that must be set to null.

   * @param Testuser testuser

   */

    public int updateNotNullOnlyTestuser(Testuser testuser) ;

        

       public int updateNotNullOnlyPrototypeTestuser(Testuser testuser, Testuser prototypeCriteria);

      

     /**

     * Saves a Testuser entity

     * @param Testuser testuser

     */

    public void saveTestuser(Testuser testuser);

   

    /**

     * Deletes a Testuser entity

     * @param Testuser testuser

     */

    public void deleteTestuser(Testuser testuser) ;

 

    /**

     * Loads the Testuser entity which is related to an instance of

     * Testuser

     * @param Long id

     * @return Testuser The Testuser entity

    

    public Testuser loadTestuser(Long id);

*/

    /**

     * Loads the Testuser entity which is related to an instance of

     * Testuser

     * @param java.lang.String Userid

     * @return Testuser The Testuser entity

     */

    public Testuser loadTestuser(java.lang.String userid);   

 

    /**

     * Loads a list of Testuser entity

     * @param List<java.lang.String> userids

     * @return List<Testuser> The Testuser entity

     */

    public List<Testuser> loadTestuserListByTestuser (List<Testuser> testusers);

   

    /**

     * Loads a list of Testuser entity

     * @param List<java.lang.String> userids

     * @return List<Testuser> The Testuser entity

     */

    public List<Testuser> loadTestuserListByUserid(List<java.lang.String> userids);

   

    /**

     * Loads the Testuser entity which is related to an instance of

     * Testuser and its dependent one to many objects

     * @param Long id

     * @return Testuser The Testuser entity

     */

    public Testuser loadFullFirstLevelTestuser(java.lang.String userid);

   

    /**

     * Loads the Testuser entity which is related to an instance of

     * Testuser

     * @param Testuser testuser

     * @return Testuser The Testuser entity

     */

    public Testuser loadFullFirstLevelTestuser(Testuser testuser);   

   

   

    /**

     * Loads the Testuser entity which is related to an instance of

     * Testuser and its dependent objects one to many

     * @param Long id

     * @return Testuser The Testuser entity

     */

    public Testuser loadFullTestuser(Long id) ;

 

    /**

     * Searches a list of Testuser entity based on a Testuser containing Testuser matching criteria on the positive mask

     * @param Testuser testuser

     * @return List<Testuser>

     */

    public List<Testuser> searchPrototypeTestuser(Testuser testuser) ;

   

 

    /**

     * Searches a list of Testuser entity based on a Testuser containing Testuser matching criteria on any field

     * @param Testuser testuser

     * @return List<Testuser>

     */

    public List<Testuser> searchPrototypeAnyTestuser(Testuser testuser) ;

 

    public List<Testuser> find (Testuser testuser, EntityMatchType matchType, OperandType operandType, Boolean caseSensitivenessType) ;

 

    /**

     * Searches a list of Testuser entity based on a list of Testuser containing Testuser matching criteria

     * @param List<Testuser> testusers

     * @return List<Testuser>

     */

    public List<Testuser> searchPrototypeTestuser(List<Testuser> testusers) ;   

          

       /**

     * Searches a list of Testuser entity

     * @param Testuser testuser

     * @return List

     */

    public List<Testuser> searchPrototypeTestuser(Testuser testuserPositive, Testuser testuserNegative) ;

 

}