有没有自动生成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>