自动生成spring代码工具

有没有自动生成SPRING的代码工具? 能够自动生成pojo,dao,control,service, 我看到网上有个spring roo工具,但是感觉不好用。

是自动生成Dao,Action,Service,Controller之类的吧?

这种工具不知道有没有开源的,不过很多公司可能都有自己的一套。
我们公司也有,不过只有给你讲一下大概的思路。

该工具一般由以下几部分组成:读取数据库的数据表结构的功能,模板引擎(如:freemarker,也可以自己写),模板(对应:生成Dao,Action,Service,Controller之类的);
以下为Model文件的生成模板文件内容,仅供参考:

 package ${basepackage}.model;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

<#include "/java_imports.include">

/**
 * ${table.tableAlias}
 */
@SuppressWarnings("serial")
public class ${className} extends BaseEntity {

    //date formats
    <#list table.columns as column>
    <#if column.isDateTimeColumn>
    public static final String FORMAT_${column.constantName} = DATE_TIME_FORMAT;
    </#if>
    </#list>

    //columns START
    <#list table.columns as column>
    //${column.columnAlias}
    private ${column.javaType} ${column.columnNameLower};
    </#list>
    //columns END

<@generateConstructor className/>
<@generateJavaColumns/>
<@generateJavaOneToMany/>
<@generateJavaManyToOne/>
}

<#macro generateJavaColumns>
    <#list table.columns as column>
        <#if column.isDateTimeColumn>
    /**
     * ${column.columnAlias}
     * @return
     */
    public String get${column.columnName}String() {
        return date2String(get${column.columnName}(), FORMAT_${column.constantName});
    }

    /**
     * ${column.columnAlias}
     * @param value
     */
    public void set${column.columnName}String(String value) {
        set${column.columnName}(string2Date(value, FORMAT_${column.constantName},${column.javaType}.class));
    }

        </#if>
    /**
     * ${column.columnAlias}
     * @return
     */
    public ${column.javaType} get${column.columnName}() {
        return this.${column.columnNameLower};
    }

    /**
     * ${column.columnAlias}
     * @param value
     */
    public void set${column.columnName}(${column.javaType} value) {
        this.${column.columnNameLower} = value;
    }
    </#list>
</#macro>

<#macro generateJavaOneToMany>
    <#list table.exportedKeys.associatedTables?values as foreignKey>
    <#assign fkSqlTable = foreignKey.sqlTable>
    <#assign fkTable    = fkSqlTable.className>
    <#assign fkPojoClass = fkSqlTable.className>
    <#assign fkPojoClassVar = fkPojoClass?uncap_first>

    private Set ${fkPojoClassVar}s = new HashSet(0);
    public void set${fkPojoClass}s(Set<${fkPojoClass}> ${fkPojoClassVar}){
        this.${fkPojoClassVar}s = ${fkPojoClassVar};
    }

    public Set<${fkPojoClass}> get${fkPojoClass}s() {
        return ${fkPojoClassVar}s;
    }
    </#list>
</#macro>

<#macro generateJavaManyToOne>
    <#list table.importedKeys.associatedTables?values as foreignKey>
    <#assign fkSqlTable = foreignKey.sqlTable>
    <#assign fkTable    = fkSqlTable.className>
    <#assign fkPojoClass = fkSqlTable.className>
    <#assign fkPojoClassVar = fkPojoClass?uncap_first>

    private ${fkPojoClass} ${fkPojoClassVar};

    public void set${fkPojoClass}(${fkPojoClass} ${fkPojoClassVar}){
        this.${fkPojoClassVar} = ${fkPojoClassVar};
    }

    public ${fkPojoClass} get${fkPojoClass}() {
        return ${fkPojoClassVar};
    }
    </#list>
</#macro>