优化: 填充生成信息

master
曹世达 6 months ago
parent d34076ec0c
commit f16f2642e6

@ -24,7 +24,7 @@
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.14</version>
<version>1.3.14</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
@ -36,13 +36,13 @@
<artifactId>fastjson</artifactId>
<version>2.0.48</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

@ -1,9 +0,0 @@
package space.caoshd.otone.aware;
import space.caoshd.otone.entity.ColumnInfo;
import java.util.Map;
public interface ColumnCreateAware {
void addon(ColumnInfo tableInfo, Map<String, Object> addInfo);
}

@ -1,9 +0,0 @@
package space.caoshd.otone.aware;
import space.caoshd.otone.entity.TableInfo;
import java.util.Map;
public interface TableCreateAware {
void addon(TableInfo tableInfo, Map<String, Object> addInfo);
}

@ -2,7 +2,6 @@ package space.caoshd.otone.builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.aware.ColumnCreateAware;
import space.caoshd.otone.entity.ColumnInfo;
import space.caoshd.otone.tool.PropTools;
import space.caoshd.otone.util.DBUtils;
@ -21,23 +20,16 @@ public class ColumnBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(ColumnBuilder.class);
private static final PropTools CONFIG =
new PropTools(PathConsts.MYSQL_PROPERTIES_PATH);
private static final PropTools CONFIG = new PropTools(PathConsts.MYSQL_PROPERTIES_PATH);
private final String schemaName;
private final String tableName;
private final List<ColumnCreateAware> columnCreateAwares = new ArrayList<>();
public ColumnBuilder(String schemaName, String tableName) {
this.schemaName = schemaName;
this.tableName = tableName;
}
public ColumnBuilder addColumnAddonAble(ColumnCreateAware columnCreateAware) {
this.columnCreateAwares.add(columnCreateAware);
return this;
}
public List<ColumnInfo> build() {
String sql = CONFIG.getString(SqlConsts.COLUMN_SQL_SCHEMA_TABLE);
List<String> params = Arrays.asList(schemaName, tableName);
@ -65,10 +57,6 @@ public class ColumnBuilder {
String extra = CONFIG.getString(SqlConsts.LABEL_EXTRA);
result.setAutoIncrement(column.get(extra).contains(SqlConsts.VALUE_AUTO_INCREMENT));
for (ColumnCreateAware columnCreateAware : columnCreateAwares) {
columnCreateAware.addon(result, result.getAddonInfo());
}
LOGGER.debug(JsonUtils.toJson(result));
return result;
}

@ -14,13 +14,11 @@ public class OutputBuilder {
return this;
}
public OutputBuilder setTemplatePath(String templatePath) {
this.outputInfo.setTemplatePath(templatePath);
return this;
}
public OutputBuilder setPackagePath(String packagePath) {
this.outputInfo.setPackagePath(packagePath);
return this;
@ -31,6 +29,16 @@ public class OutputBuilder {
return this;
}
public OutputBuilder setNamePrefix(String namePrefix) {
this.outputInfo.setNamePrefix(namePrefix);
return this;
}
public OutputBuilder setPackageName(String packageName) {
this.outputInfo.setPackageName(packageName);
return this;
}
public OutputInfo build() {
return outputInfo;
}

@ -12,7 +12,9 @@ import space.caoshd.otone.util.VelocityUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SourceBuilder {
@ -28,6 +30,8 @@ public class SourceBuilder {
private List<OutputInfo> outputInfoList;
private final Map<String, Object> extra = new HashMap<>();
public SourceBuilder setTableInfo(TableInfo tableInfo) {
this.tableInfo = tableInfo;
return this;
@ -48,6 +52,16 @@ public class SourceBuilder {
return this;
}
public SourceBuilder setExtra(Map<String, Object> extra) {
this.extra.putAll(extra);
return this;
}
public SourceBuilder addExtra(String key, Object data) {
this.extra.put(key, data);
return this;
}
public void build() {
if (tableInfo != null) {
// 设定单个表 则不使用全部表
@ -75,14 +89,23 @@ public class SourceBuilder {
}
private void build(TableInfo tableInfo, OutputInfo outputInfo) {
// 获取表信息 配置信息
String beanName = tableInfo.getClassName();
String nameSuffix = outputInfo.getNameSuffix();
String namePrefix = outputInfo.getNamePrefix();
String packagePath = outputInfo.getPackagePath();
String packageName = outputInfo.getPackageName();
// 添加附加信息
tableInfo.setExtra(extra);
tableInfo.setClassNameSuffix(nameSuffix);
tableInfo.setClassNamePrefix(namePrefix);
tableInfo.setPackageName(packageName);
// 创建数据文件夹
FileUtils.mkdir(outputInfo.getPackagePath());
FileUtils.mkdir(packagePath);
// 获取输出文件路径
String outputPath = CfgUtils.getOutputPath(
outputInfo.getPackagePath(),
tableInfo.getBeanName(),
outputInfo.getNameSuffix()
);
String outputPath = CfgUtils.getJavaFilePath(packagePath, beanName, nameSuffix, namePrefix);
// 获取模板文件路径
String templatePath = outputInfo.getTemplatePath();
// 判断输出文件是否已存在
@ -96,9 +119,7 @@ public class SourceBuilder {
VelocityUtils.render(CfgUtils.VALUE_TABLE, tableInfo, templatePath, outputPath);
} else {
// 配置不可以执行覆盖 提示错误消息
LOGGER.warn(
"output file already exists: {}, " + "please remove it or enable auto "
+ "cover exist file,"
LOGGER.warn("output file already exists: {}, " + "please remove it or enable auto " + "cover exist file,"
+ " config.properties should like [output.cover_if_exists=true]",
outputPath
);
@ -119,36 +140,50 @@ public class SourceBuilder {
new OutputBuilder().setNameSuffix(CfgUtils.getPoNameSuffix())
.setTemplatePath(CfgUtils.getPoTemplatePath())
.setPackagePath(CfgUtils.getPoPackagePath())
.setPackageName(CfgUtils.getPoPackageName())
.build(),
// MAPPER
new OutputBuilder().setNameSuffix(CfgUtils.getMapperNameSuffix())
.setTemplatePath(CfgUtils.getMapperTemplatePath())
.setPackagePath(CfgUtils.getMapperPackagePath())
.setPackageName(CfgUtils.getMapperPackageName())
.build(),
// SERVICE
new OutputBuilder().setNameSuffix(CfgUtils.getServiceNameSuffix())
.setTemplatePath(CfgUtils.getServiceTemplatePath())
.setPackagePath(CfgUtils.getServicePackagePath())
.setPackageName(CfgUtils.getServicePackageName())
.build(),
// SERVICE INTERFACE
new OutputBuilder().setNameSuffix(CfgUtils.getServiceNameSuffix())
.setNamePrefix(CfgUtils.getServiceInterfacePrefix())
.setTemplatePath(CfgUtils.getServiceInterfaceTemplatePath())
.setPackagePath(CfgUtils.getServiceInterfacePackagePath())
.setPackageName(CfgUtils.getServiceInterfacePackageName())
.build(),
// CONTROLLER
new OutputBuilder().setNameSuffix(CfgUtils.getControllerNameSuffix())
.setTemplatePath(CfgUtils.getControllerTemplatePath())
.setPackagePath(CfgUtils.getControllerPackagePath())
.setPackageName(CfgUtils.getControllerPackageName())
.build(),
// VIEW
new OutputBuilder().setNameSuffix(CfgUtils.getViewNameSuffix())
.setTemplatePath(CfgUtils.getViewTemplatePath())
.setPackagePath(CfgUtils.getViewPackagePath())
.setPackageName(CfgUtils.getViewPackageName())
.build(),
// FORM
new OutputBuilder().setNameSuffix(CfgUtils.getFormNameSuffix())
.setTemplatePath(CfgUtils.getFormTemplatePath())
.setPackagePath(CfgUtils.getFormPackagePath())
.setPackageName(CfgUtils.getFormPackageName())
.build(),
// QUERY
new OutputBuilder().setNameSuffix(CfgUtils.getQueryNameSuffix())
.setTemplatePath(CfgUtils.getQueryTemplatePath())
.setPackagePath(CfgUtils.getQueryPackagePath())
.setPackageName(CfgUtils.getQueryPackageName())
.build()
);
}

@ -2,8 +2,6 @@ package space.caoshd.otone.builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.aware.ColumnCreateAware;
import space.caoshd.otone.aware.TableCreateAware;
import space.caoshd.otone.entity.ColumnInfo;
import space.caoshd.otone.entity.IndexInfo;
import space.caoshd.otone.entity.TableInfo;
@ -24,7 +22,6 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
public class TableBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class);
@ -33,19 +30,6 @@ public class TableBuilder {
private static final PropTools CONFIG = new PropTools(PathConsts.CONFIG_PROPERTIES_PATH);
private final List<TableCreateAware> tableCreateAwares = new ArrayList<>();
private final List<ColumnCreateAware> columnCreateAwares = new ArrayList<>();
public TableBuilder addTableAddonAble(TableCreateAware tableCreateAware) {
this.tableCreateAwares.add(tableCreateAware);
return this;
}
public TableBuilder addColumnAddonAble(ColumnCreateAware columnCreateAware) {
this.columnCreateAwares.add(columnCreateAware);
return this;
}
public List<TableInfo> build() {
List<TableInfo> result = new ArrayList<>();
List<String> schemaNames = CONFIG.getStrings(CfgUtils.DATABASE_NAME_SCHEMAS);
@ -113,13 +97,14 @@ public class TableBuilder {
String tableNameWithoutPrefix = getTableNameWithoutPrefix(result.getTableName());
String beanName = StrUtils.toCamelCase(tableNameWithoutPrefix, true);
result.setBeanName(beanName);
result.setClassName(beanName);
List<ColumnInfo> columnInfo = loadColumnInfo(tableSchema, tableName);
result.setColumnInfo(columnInfo);
result.setColumns(columnInfo);
result.setDateExists(columnInfo.stream()
.anyMatch(column -> TypeUtils.JAVA_TYPE_DATE.equals(column.getJavaDataType())));
result.setDecimalExists(columnInfo.stream()
.anyMatch(column -> TypeUtils.JAVA_TYPE_DECIMAL.equals(column.getJavaDataType())));
@ -141,22 +126,14 @@ public class TableBuilder {
indexColumnInfoList.add(columnInfoByColumnName);
});
result.setIndexInfo(indexInfo);
for (TableCreateAware tableCreateAware : tableCreateAwares) {
tableCreateAware.addon(result, result.getAddonInfo());
}
result.setIndexes(indexInfo);
LOGGER.debug(JsonUtils.toJson(result));
return result;
}
private List<ColumnInfo> loadColumnInfo(String tableSchema, String tableName) {
ColumnBuilder columnBuilder = new ColumnBuilder(tableSchema, tableName);
for (ColumnCreateAware columnCreateAware : columnCreateAwares) {
columnBuilder.addColumnAddonAble(columnCreateAware);
}
return columnBuilder.build();
return new ColumnBuilder(tableSchema, tableName).build();
}
private ColumnInfo getColumnInfoByColumnName(

@ -1,11 +1,7 @@
package space.caoshd.otone.entity;
import java.util.HashMap;
import java.util.Map;
public class ColumnInfo {
private final Map<String, Object> addonInfo = new HashMap<>();
private String columnName;
private String propertyName;
private String sqlDataType;
@ -60,8 +56,4 @@ public class ColumnInfo {
public void setAutoIncrement(Boolean autoIncrement) {
this.autoIncrement = autoIncrement;
}
public Map<String, Object> getAddonInfo() {
return addonInfo;
}
}

@ -8,9 +8,13 @@ public class OutputInfo {
private String templatePath;
private String packageName;
private String packagePath;
private String nameSuffix;
private String nameSuffix = "";
private String namePrefix = "";
public List<TableInfo> getTableInfoList() {
return tableInfoList;
@ -28,6 +32,14 @@ public class OutputInfo {
this.templatePath = templatePath;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public String getPackagePath() {
return packagePath;
}
@ -44,4 +56,11 @@ public class OutputInfo {
this.nameSuffix = nameSuffix;
}
public String getNamePrefix() {
return namePrefix;
}
public void setNamePrefix(String namePrefix) {
this.namePrefix = namePrefix;
}
}

@ -8,15 +8,18 @@ import java.util.Map;
public class TableInfo {
private final Map<String, Object> addonInfo = new HashMap<>();
private String comment;
private String tableSchema;
private String tableName;
private String beanName;
private String packageName;
private String className;
private String classNameSuffix;
private String classNamePrefix;
private Boolean dateExists;
private Boolean decimalExists;
private List<ColumnInfo> columnInfo = new ArrayList<>();
private Map<String, List<ColumnInfo>> indexInfo = new LinkedHashMap<>();
private List<ColumnInfo> columns = new ArrayList<>();
private Map<String, List<ColumnInfo>> indexes = new LinkedHashMap<>();
private Map<String, Object> extra = new HashMap<>();
public String getComment() {
return comment;
@ -42,12 +45,36 @@ public class TableInfo {
this.tableName = tableName;
}
public String getBeanName() {
return beanName;
public String getPackageName() {
return packageName;
}
public void setBeanName(String beanName) {
this.beanName = beanName;
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getClassNamePrefix() {
return classNamePrefix;
}
public void setClassNamePrefix(String classNamePrefix) {
this.classNamePrefix = classNamePrefix;
}
public String getClassNameSuffix() {
return classNameSuffix;
}
public void setClassNameSuffix(String classNameSuffix) {
this.classNameSuffix = classNameSuffix;
}
public Boolean getDateExists() {
@ -66,23 +93,27 @@ public class TableInfo {
this.decimalExists = decimalExists;
}
public List<ColumnInfo> getColumnInfo() {
return columnInfo;
public List<ColumnInfo> getColumns() {
return columns;
}
public void setColumns(List<ColumnInfo> columns) {
this.columns = columns;
}
public void setColumnInfo(List<ColumnInfo> columnInfo) {
this.columnInfo = columnInfo;
public Map<String, List<ColumnInfo>> getIndexes() {
return indexes;
}
public Map<String, List<ColumnInfo>> getIndexInfo() {
return indexInfo;
public void setIndexes(Map<String, List<ColumnInfo>> indexes) {
this.indexes = indexes;
}
public void setIndexInfo(Map<String, List<ColumnInfo>> indexInfo) {
this.indexInfo = indexInfo;
public Map<String, Object> getExtra() {
return extra;
}
public Map<String, Object> getAddonInfo() {
return addonInfo;
public void setExtra(Map<String, Object> extra) {
this.extra = extra;
}
}

@ -24,6 +24,7 @@ public class CfgUtils {
public static final String PACKAGE_NAME_PO = "package.name.po";
public static final String PACKAGE_NAME_MAPPER = "package.name.mapper";
public static final String PACKAGE_NAME_SERVICE = "package.name.service";
public static final String PACKAGE_NAME_SERVICE_INTERFACE = "package.name.service.interface";
public static final String PACKAGE_NAME_CONTROLLER = "package.name.controller";
public static final String PACKAGE_NAME_QUERY = "package.name.query";
public static final String PACKAGE_NAME_FORM = "package.name.form";
@ -44,6 +45,8 @@ public class CfgUtils {
public static final String JAVA_NAME_SUFFIX_FORM = "java.name.suffix.form";
public static final String JAVA_NAME_SUFFIX_VIEW = "java.name.suffix.view";
public static final String JAVA_NAME_SUFFIX_CONTROLLER = "java.name.suffix.controller";
public static final String JAVA_NAME_PREFIX_SERVICE_INTERFACE = "java.name.prefix.service"
+ ".interface";
// 模版路径配置
public static final String TEMPLATE_PATH_PO = "template.path.po";
@ -52,9 +55,9 @@ public class CfgUtils {
public static final String TEMPLATE_PATH_QUERY = "template.path.query";
public static final String TEMPLATE_PATH_CONTROLLER = "template.path.controller";
public static final String TEMPLATE_PATH_SERVICE = "template.path.service";
public static final String TEMPLATE_PATH_SERVICE_INTERFACE = "template.path.service_interface";
public static final String TEMPLATE_PATH_SERVICE_INTERFACE = "template.path.service.interface";
public static final String TEMPLATE_PATH_MAPPER = "template.path.mapper";
public static final String TEMPLATE_PATH_MAPPER_XML = "template.path.mapper_xml";
public static final String TEMPLATE_PATH_MAPPER_XML = "template.path.mapper.xml";
// 常量配置
public static final String VALUE_TABLE = "table";
@ -66,7 +69,8 @@ public class CfgUtils {
// 包名默认值配置
public static final String DEFAULT_PACKAGE_NAME_PO = "repository.po";
public static final String DEFAULT_PACKAGE_NAME_MAPPER = "repository.mapper";
public static final String DEFAULT_PACKAGE_NAME_SERVICE = "service";
public static final String DEFAULT_PACKAGE_NAME_SERVICE_INTERFACE = "service";
public static final String DEFAULT_PACKAGE_NAME_SERVICE = "service.impl";
public static final String DEFAULT_PACKAGE_NAME_QUERY = "controller.query";
public static final String DEFAULT_PACKAGE_NAME_FORM = "controller.form";
public static final String DEFAULT_PACKAGE_NAME_VIEW = "controller.view";
@ -85,6 +89,7 @@ public class CfgUtils {
public static final String DEFAULT_JAVA_NAME_SUFFIX_FORM = "Form";
public static final String DEFAULT_JAVA_NAME_SUFFIX_VIEW = "View";
public static final String DEFAULT_JAVA_NAME_SUFFIX_CONTROLLER = "Controller";
public static final String DEFAULT_JAVA_NAME_PREFIX_SERVICE_INTERFACE = "I";
// 模板文件路径默认值配置
public static final String DEFAULT_TEMPLATE_PATH_PO = "template/po.vm";
@ -93,7 +98,8 @@ public class CfgUtils {
public static final String DEFAULT_TEMPLATE_PATH_QUERY = "template/query.vm";
public static final String DEFAULT_TEMPLATE_PATH_CONTROLLER = "template/controller.vm";
public static final String DEFAULT_TEMPLATE_PATH_SERVICE = "template/service.vm";
public static final String DEFAULT_TEMPLATE_PATH_SERVICE_INTERFACE = "service.interface/po.vm";
public static final String DEFAULT_TEMPLATE_PATH_SERVICE_INTERFACE = "template/service"
+ ".interface.vm";
public static final String DEFAULT_TEMPLATE_PATH_MAPPER = "template/mapper.vm";
public static final String DEFAULT_TEMPLATE_PATH_MAPPER_XML = "template/mapper.xml.vm";
private static final PropTools CONFIG = new PropTools(PathConsts.CONFIG_PROPERTIES_PATH);
@ -112,14 +118,14 @@ public class CfgUtils {
public static String getProjectPath(String moduleName) {
String projectBasePath = getProjectBasePath();
if (!isMultiModule()) {
if (!isMultipleModule()) {
return projectBasePath;
} else {
return projectBasePath + "/" + getProjectName() + "-" + moduleName;
}
}
public static boolean isMultiModule() {
public static boolean isMultipleModule() {
return CONFIG.getBoolean(MODULE_MULTIPLE);
}
@ -127,212 +133,271 @@ public class CfgUtils {
return CONFIG.getBoolean(MODULE_NAME_AS_PACKAGE_BASE);
}
public static String getJavaPath(String moduleName) {
public static String getMainJavaPath(String moduleName) {
String projectPath = getProjectPath(moduleName);
String projectPathJava = CONFIG.getString(PROJECT_PATH_JAVA, DEFAULT_PROJECT_PATH_JAVA);
return Paths.get(projectPath, projectPathJava).toString();
}
private static String packageToPath(String packageName) {
private static String packageNameToPath(String packageName) {
return packageName.replaceAll("\\.", "/");
}
public static String getPackageBasePath(String moduleName) {
String javaPath = getJavaPath(moduleName);
String packageName = CONFIG.getString(PACKAGE_NAME_BASE);
String packagePath = packageToPath(packageName);
public static String getPackageName(String moduleName, String packageName) {
String packageNameBase = CONFIG.getString(PACKAGE_NAME_BASE);
if (moduleNameAsPackageBase()) {
return Paths.get(javaPath, packagePath, moduleName).toString();
return packageNameBase + "." + moduleName + "." + packageName;
} else {
return Paths.get(javaPath, packagePath).toString();
return packageNameBase + "." + packageName;
}
}
public static String getPathBasedPackage(
String moduleName, String configName
) {
String basePath = getPackageBasePath(moduleName);
String packagePath = packageToPath(configName);
return Paths.get(basePath, packagePath).toString();
public static String getPackagePath(String moduleName, String packageName) {
String javaPath = getMainJavaPath(moduleName);
String packagePath = packageNameToPath(packageName);
return Paths.get(javaPath, packagePath).toString();
}
public static String getRepositoryModuleName() {
return CONFIG.getString(MODULE_NAME_REPOSITORY, DEFAULT_MODULE_NAME_REPOSITORY);
public static String getJavaFilename(String className, String nameSuffix, String prefix) {
return prefix + className + nameSuffix + JAVA_FILE_SUFFIX;
}
public static String getServiceModuleName() {
return CONFIG.getString(MODULE_NAME_SERVICE, DEFAULT_MODULE_NAME_SERVICE);
public static String getJavaFilename(String className, String nameSuffix) {
return getJavaFilename(className, nameSuffix, "");
}
public static String getJavaFilePath(
String packagePath, String className, String nameSuffix, String namePrefix
) {
String filename = CfgUtils.getJavaFilename(className, nameSuffix, namePrefix);
return Paths.get(packagePath, filename).toString();
}
public static String getControllerModuleName() {
return CONFIG.getString(MODULE_NAME_CONTROLLER, DEFAULT_MODULE_NAME_CONTROLLER);
}
public static String getServicePackagePath() {
public static String getControllerNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_CONTROLLER, DEFAULT_JAVA_NAME_SUFFIX_CONTROLLER);
}
public static String getControllerTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_CONTROLLER, DEFAULT_TEMPLATE_PATH_CONTROLLER);
}
public static String getControllerPackageName() {
String moduleName = getServiceModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_SERVICE, DEFAULT_PACKAGE_NAME_MAPPER);
return getPathBasedPackage(moduleName, configName);
String packageName = CONFIG.getString(
PACKAGE_NAME_CONTROLLER,
DEFAULT_PACKAGE_NAME_CONTROLLER
);
return getPackageName(moduleName, packageName);
}
public static String getControllerPackagePath() {
String moduleName = getControllerModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_CONTROLLER,
DEFAULT_PACKAGE_NAME_CONTROLLER
String packageName = getControllerPackageName();
return getPackagePath(moduleName, packageName);
}
public static String getControllerFilePath(String className) {
String controllerPackagePath = getControllerPackagePath();
String suffix = CONFIG.getString(
JAVA_NAME_SUFFIX_CONTROLLER,
DEFAULT_JAVA_NAME_SUFFIX_CONTROLLER
);
return getPathBasedPackage(moduleName, configName);
String filename = getJavaFilename(className, suffix);
return Paths.get(controllerPackagePath, filename).toString();
}
public static String getViewPackagePath() {
String moduleName = getControllerModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_VIEW, DEFAULT_PACKAGE_NAME_VIEW);
return getPathBasedPackage(moduleName, configName);
public static String getViewNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_VIEW, DEFAULT_JAVA_NAME_SUFFIX_VIEW);
}
public static String getFormPackagePath() {
String moduleName = getControllerModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_FORM, DEFAULT_PACKAGE_NAME_FORM);
return getPathBasedPackage(moduleName, configName);
public static String getViewTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_VIEW, DEFAULT_TEMPLATE_PATH_VIEW);
}
public static String getQueryPackagePath() {
public static String getViewPackageName() {
String moduleName = getControllerModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_QUERY, DEFAULT_PACKAGE_NAME_QUERY);
return getPathBasedPackage(moduleName, configName);
String packageName = CONFIG.getString(PACKAGE_NAME_VIEW, DEFAULT_PACKAGE_NAME_VIEW);
return getPackageName(moduleName, packageName);
}
public static String getPoPackagePath() {
String moduleName = getRepositoryModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_PO, DEFAULT_PACKAGE_NAME_PO);
return getPathBasedPackage(moduleName, configName);
public static String getViewPackagePath() {
String moduleName = getControllerModuleName();
String packageName = getViewPackageName();
return getPackagePath(moduleName, packageName);
}
public static String getMapperPackagePath() {
String moduleName = getRepositoryModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_MAPPER, DEFAULT_PACKAGE_NAME_MAPPER);
return getPathBasedPackage(moduleName, configName);
public static String getViewFilePath(String className) {
String viewPackagePath = getViewPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_VIEW, DEFAULT_JAVA_NAME_SUFFIX_VIEW);
String filename = getJavaFilename(className, suffix);
return Paths.get(viewPackagePath, filename).toString();
}
private static String getFilename(String className, String suffix) {
return className + suffix + JAVA_FILE_SUFFIX;
public static String getFormNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_FORM, DEFAULT_JAVA_NAME_SUFFIX_FORM);
}
public static String getPoJavaPath(String className) {
String poPackagePath = getPoPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_PO, DEFAULT_JAVA_NAME_SUFFIX_PO);
String filename = getFilename(className, suffix);
return Paths.get(poPackagePath, filename).toString();
public static String getFormTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_FORM, DEFAULT_TEMPLATE_PATH_FORM);
}
public static String getMapperJavaPath(String className) {
String mapperPackagePath = getMapperPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_MAPPER, DEFAULT_JAVA_NAME_SUFFIX_MAPPER);
String filename = getFilename(className, suffix);
return Paths.get(mapperPackagePath, filename).toString();
public static String getFormPackageName() {
String moduleName = getControllerModuleName();
String packageName = CONFIG.getString(PACKAGE_NAME_FORM, DEFAULT_PACKAGE_NAME_FORM);
return getPackageName(moduleName, packageName);
}
public static String getServiceJavaPath(String className) {
String servicePackagePath = getServicePackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_SERVICE,
DEFAULT_JAVA_NAME_SUFFIX_SERVICE
);
String filename = getFilename(className, suffix);
return Paths.get(servicePackagePath, filename).toString();
public static String getFormPackagePath() {
String moduleName = getControllerModuleName();
String packageName = getFormPackageName();
return getPackagePath(moduleName, packageName);
}
public static String getFormFilePath(String className) {
String formPackagePath = getFormPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_FORM, DEFAULT_JAVA_NAME_SUFFIX_FORM);
String filename = getJavaFilename(className, suffix);
return Paths.get(formPackagePath, filename).toString();
}
public static String getControllerJavaPath(String className) {
String controllerPackagePath = getControllerPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_CONTROLLER,
DEFAULT_JAVA_NAME_SUFFIX_CONTROLLER
);
String filename = getFilename(className, suffix);
return Paths.get(controllerPackagePath, filename).toString();
public static String getQueryNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_QUERY, DEFAULT_JAVA_NAME_SUFFIX_QUERY);
}
public static String getQueryTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_QUERY, DEFAULT_TEMPLATE_PATH_QUERY);
}
public static String getFormJavaPath(String className) {
String formPackagePath = getFormPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_CONTROLLER,
DEFAULT_JAVA_NAME_SUFFIX_CONTROLLER
);
String filename = getFilename(className, suffix);
return Paths.get(formPackagePath, filename).toString();
public static String getQueryPackageName() {
String moduleName = getControllerModuleName();
String configName = CONFIG.getString(PACKAGE_NAME_QUERY, DEFAULT_PACKAGE_NAME_QUERY);
return getPackageName(moduleName, configName);
}
public static String getQueryPackagePath() {
String moduleName = getControllerModuleName();
String configName = getQueryPackageName();
return getPackagePath(moduleName, configName);
}
public static String getQueryJavaPath(String className) {
public static String getQueryFilePath(String className) {
String basePath = getQueryPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_QUERY, DEFAULT_JAVA_NAME_SUFFIX_QUERY);
String filename = getFilename(className, suffix);
String filename = getJavaFilename(className, suffix);
return Paths.get(basePath, filename).toString();
}
public static String getViewJavaPath(String className) {
String viewPackagePath = getViewPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_VIEW, DEFAULT_JAVA_NAME_SUFFIX_VIEW);
String filename = getFilename(className, suffix);
return Paths.get(viewPackagePath, filename).toString();
public static String getServiceModuleName() {
return CONFIG.getString(MODULE_NAME_SERVICE, DEFAULT_MODULE_NAME_SERVICE);
}
public static String getViewNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_VIEW, DEFAULT_JAVA_NAME_SUFFIX_VIEW);
public static String getServiceNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_SERVICE, DEFAULT_JAVA_NAME_SUFFIX_SERVICE);
}
public static String getPoNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_PO, DEFAULT_JAVA_NAME_SUFFIX_PO);
public static String getServiceTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_SERVICE, DEFAULT_TEMPLATE_PATH_SERVICE);
}
public static String getQueryNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_QUERY, DEFAULT_JAVA_NAME_SUFFIX_QUERY);
public static String getServicePackageName() {
String moduleName = getServiceModuleName();
String packageName = CONFIG.getString(PACKAGE_NAME_SERVICE, DEFAULT_PACKAGE_NAME_SERVICE);
return getPackageName(moduleName, packageName);
}
public static String getFormNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_FORM, DEFAULT_JAVA_NAME_SUFFIX_FORM);
public static String getServicePackagePath() {
String moduleName = getServiceModuleName();
String packageName = getServicePackageName();
return getPackagePath(moduleName, packageName);
}
public static String getControllerNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_CONTROLLER, DEFAULT_JAVA_NAME_SUFFIX_CONTROLLER);
public static String getServiceFilePath(String className) {
String servicePackagePath = getServicePackagePath();
String suffix = CONFIG.getString(
JAVA_NAME_SUFFIX_SERVICE,
DEFAULT_JAVA_NAME_SUFFIX_SERVICE
);
String filename = getJavaFilename(className, suffix);
return Paths.get(servicePackagePath, filename).toString();
}
public static String getServiceNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_SERVICE, DEFAULT_JAVA_NAME_SUFFIX_SERVICE);
public static String getServiceInterfacePrefix() {
return CONFIG.getString(
JAVA_NAME_PREFIX_SERVICE_INTERFACE,
DEFAULT_JAVA_NAME_PREFIX_SERVICE_INTERFACE
);
}
public static String getMapperNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_MAPPER, DEFAULT_JAVA_NAME_SUFFIX_MAPPER);
public static String getServiceInterfaceTemplatePath() {
return CONFIG.getString(
TEMPLATE_PATH_SERVICE_INTERFACE,
DEFAULT_TEMPLATE_PATH_SERVICE_INTERFACE
);
}
public static String getPoTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_PO, DEFAULT_TEMPLATE_PATH_PO);
public static String getServiceInterfacePackageName() {
String moduleName = getServiceModuleName();
String packageName = CONFIG.getString(
PACKAGE_NAME_SERVICE_INTERFACE,
DEFAULT_PACKAGE_NAME_SERVICE_INTERFACE
);
return getPackageName(moduleName, packageName);
}
public static String getViewTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_VIEW, DEFAULT_TEMPLATE_PATH_VIEW);
public static String getServiceInterfacePackagePath() {
String moduleName = getServiceModuleName();
String packageName = getServiceInterfacePackageName();
return getPackagePath(moduleName, packageName);
}
public static String getServiceInterfaceFilePath(String className) {
String servicePackagePath = getServicePackagePath();
String prefix = CONFIG.getString(
JAVA_NAME_PREFIX_SERVICE_INTERFACE,
DEFAULT_JAVA_NAME_PREFIX_SERVICE_INTERFACE
);
String filename = getJavaFilename(className, "", prefix);
return Paths.get(servicePackagePath, filename).toString();
}
public static String getFormTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_FORM, DEFAULT_TEMPLATE_PATH_FORM);
public static String getRepositoryModuleName() {
return CONFIG.getString(MODULE_NAME_REPOSITORY, DEFAULT_MODULE_NAME_REPOSITORY);
}
public static String getPoNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_PO, DEFAULT_JAVA_NAME_SUFFIX_PO);
}
public static String getQueryTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_QUERY, DEFAULT_TEMPLATE_PATH_QUERY);
public static String getPoTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_PO, DEFAULT_TEMPLATE_PATH_PO);
}
public static String getControllerTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_CONTROLLER, DEFAULT_TEMPLATE_PATH_CONTROLLER);
public static String getPoPackageName() {
String moduleName = getRepositoryModuleName();
String packageName = CONFIG.getString(PACKAGE_NAME_PO, DEFAULT_PACKAGE_NAME_PO);
return getPackageName(moduleName, packageName);
}
public static String getServiceTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_SERVICE, DEFAULT_TEMPLATE_PATH_SERVICE);
public static String getPoPackagePath() {
String moduleName = getRepositoryModuleName();
String packageName = getPoPackageName();
return getPackagePath(moduleName, packageName);
}
public static String getServiceInterfaceTemplatePath() {
return CONFIG.getString(TEMPLATE_PATH_SERVICE_INTERFACE,
DEFAULT_TEMPLATE_PATH_SERVICE_INTERFACE
);
public static String getPoJavaPath(String className) {
String poPackagePath = getPoPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_PO, DEFAULT_JAVA_NAME_SUFFIX_PO);
String filename = getJavaFilename(className, suffix);
return Paths.get(poPackagePath, filename).toString();
}
public static String getMapperNameSuffix() {
return CONFIG.getString(JAVA_NAME_SUFFIX_MAPPER, DEFAULT_JAVA_NAME_SUFFIX_MAPPER);
}
public static String getMapperTemplatePath() {
@ -343,15 +408,24 @@ public class CfgUtils {
return CONFIG.getString(TEMPLATE_PATH_MAPPER_XML, DEFAULT_TEMPLATE_PATH_MAPPER_XML);
}
public static String getOutputFilename(String beanName, String nameSuffix) {
return beanName + nameSuffix + JAVA_FILE_SUFFIX;
public static String getMapperPackageName() {
String moduleName = getRepositoryModuleName();
String packageName = CONFIG.getString(PACKAGE_NAME_MAPPER, DEFAULT_PACKAGE_NAME_MAPPER);
return getPackageName(moduleName, packageName);
}
public static String getOutputPath(String packagePath, String beanName, String nameSuffix) {
String filename = CfgUtils.getOutputFilename(beanName, nameSuffix);
return Paths.get(packagePath, filename).toString();
public static String getMapperPackagePath() {
String moduleName = getRepositoryModuleName();
String packageName = getMapperPackageName();
return getPackagePath(moduleName, packageName);
}
public static String getMapperFilePath(String className) {
String mapperPackagePath = getMapperPackagePath();
String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_MAPPER, DEFAULT_JAVA_NAME_SUFFIX_MAPPER);
String filename = getJavaFilename(className, suffix);
return Paths.get(mapperPackagePath, filename).toString();
}
}

@ -3,6 +3,9 @@ package space.caoshd.otone.util;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.builder.TableBuilder;
import space.caoshd.otone.tool.PropTools;
import java.io.FileWriter;
@ -12,6 +15,8 @@ import java.util.Properties;
public class VelocityUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class);
public static void render(
String beanName, Object bean, String templatePath, String outputPath
) {
@ -20,10 +25,12 @@ public class VelocityUtils {
Velocity.init(properties);
VelocityContext context = new VelocityContext();
context.put(beanName, bean);
context.put("context", bean);
Template template = Velocity.getTemplate(templatePath, StandardCharsets.UTF_8.name());
try (FileWriter fw = new FileWriter(outputPath)) {
LOGGER.info("generate file: {}", outputPath);
LOGGER.info("context info: {}", JsonUtils.toJson(bean));
template.merge(context, fw);
} catch (IOException e) {
throw new RuntimeException(e);

@ -1,10 +1,11 @@
package space.caoshd.otone.builder;
import org.junit.jupiter.api.Test;
class ColumnBuilderTest {
import org.junit.Test;
public class ColumnBuilderTest {
@Test
void loadColumnInfo() {
public void loadColumnInfo() {
}
}

@ -1,16 +1,18 @@
package space.caoshd.otone.builder;
import org.junit.jupiter.api.Test;
import org.junit.Test;
import space.caoshd.otone.tool.PropTools;
import space.caoshd.otone.util.PathConsts;
class SourceBuilderTest {
public class SourceBuilderTest {
private static final PropTools CONFIG = new PropTools(PathConsts.MYSQL_PROPERTIES_PATH);
@Test
void build() {
new SourceBuilder().build();
public void build() {
new SourceBuilder()
.addExtra("author", "caoshd")
.build();
}
}

@ -1,18 +1,14 @@
package space.caoshd.otone.builder;
import org.junit.jupiter.api.Test;
import org.junit.Test;
import space.caoshd.otone.entity.TableInfo;
import java.util.List;
class TableBuilderTest {
public class TableBuilderTest {
@Test
void loadTableInfo() {
List<TableInfo> tableInfoList = new TableBuilder().addTableAddonAble((
tableInfo, addonInfo
) -> addonInfo.put("author", "caoshd"))
.addColumnAddonAble((columnInfo, addonInfo) -> System.out.println(addonInfo))
.build();
public void loadTableInfo() {
List<TableInfo> tableInfoList = new TableBuilder().build();
}
}

@ -1,29 +1,30 @@
package space.caoshd.otone.tool;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.Assert;
import org.junit.Test;
import space.caoshd.otone.util.CfgUtils;
import space.caoshd.otone.util.PathConsts;
import space.caoshd.otone.util.ResUtils;
import java.io.*;
import java.io.InputStream;
import java.util.List;
class PropToolsTest {
public class PropToolsTest {
@Test
void loadProperties() {
InputStream fileStream = ResUtils.getClassPathFileStream(PathConsts.DATASOURCE_PROPERTIES_PATH);
public void loadProperties() {
InputStream fileStream =
ResUtils.getClassPathFileStream(PathConsts.DATASOURCE_PROPERTIES_PATH);
PropTools propTools = new PropTools(fileStream);
Assertions.assertNotNull(propTools);
Assert.assertNotNull(propTools);
}
@Test
void getString() {
public void getString() {
}
@Test
void getStrings() {
public void getStrings() {
InputStream fileStream = ResUtils.getClassPathFileStream(PathConsts.CONFIG_PROPERTIES_PATH);
PropTools configProperties = new PropTools(fileStream);
List<String> strings = configProperties.getStrings(CfgUtils.DATABASE_TABLE_PREFIXES);
@ -31,10 +32,10 @@ class PropToolsTest {
}
@Test
void getInt() {
public void getInt() {
}
@Test
void getLong() {
public void getLong() {
}
}

@ -1,41 +1,42 @@
package space.caoshd.otone.util;
import org.junit.jupiter.api.Test;
import org.junit.Test;
public class CfgUtilsTest {
@Test
void getProjectPath() {
public void getProjectPath() {
String projectPath = CfgUtils.getProjectBasePath();
System.out.println(projectPath);
}
@Test
void getProjectName() {
public void getProjectName() {
String projectName = CfgUtils.getProjectName();
System.out.println(projectName);
}
@Test
void getJavaPath() {
String javaPath = CfgUtils.getJavaPath("data");
public void getJavaPath() {
String javaPath = CfgUtils.getMainJavaPath("data");
System.out.println(javaPath);
}
@Test
void getPackagePath() {
String packagePath = CfgUtils.getPackageBasePath("service");
public void getPackagePath() {
String packagePath = CfgUtils.getPackagePath("service", "aaa");
System.out.println(packagePath);
}
@Test
void getRepositoryModuleName() {
public void getRepositoryModuleName() {
String repositoryModuleName = CfgUtils.getRepositoryModuleName();
System.out.println(repositoryModuleName);
}
@Test
void getRepositoryPackageName() {
public void getRepositoryPackageName() {
String poPackagePath = CfgUtils.getPoPackagePath();
System.out.println(poPackagePath);
@ -44,7 +45,7 @@ public class CfgUtilsTest {
}
@Test
void getViewNameSuffix() {
public void getViewNameSuffix() {
String viewNameSuffix = CfgUtils.getViewNameSuffix();
System.out.println(viewNameSuffix);
}

@ -1,17 +1,17 @@
package space.caoshd.otone.util;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.Assert;
import org.junit.Test;
import space.caoshd.otone.tool.PropTools;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
class DBUtilsTest {
public class DBUtilsTest {
@Test
void executeQuery() {
public void executeQuery() {
PropTools sqlProperties = new PropTools(PathConsts.MYSQL_PROPERTIES_PATH);
String sql = sqlProperties.getString(SqlConsts.TABLE_SQL_SCHEMA_TABLE);
PropTools configProperties =
@ -20,6 +20,6 @@ class DBUtilsTest {
List<String> tables = configProperties.getStrings(CfgUtils.DATABASE_NAME_TABLES);
List<Object> params = Arrays.asList(schemas.get(0), tables.get(0));
List<Map<String, String>> maps = DBUtils.list(sql, params);
Assertions.assertFalse(maps.isEmpty());
Assert.assertFalse(maps.isEmpty());
}
}

@ -1,18 +1,18 @@
package space.caoshd.otone.util;
import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.io.File;
class ResUtilsTest {
public class ResUtilsTest {
@Test
void getClassPathFile() {
public void getClassPathFile() {
File file = ResUtils.getClassPathFile("datasource.properties");
System.out.println(file);
}
@Test
void getClassPathFileStream() {
public void getClassPathFileStream() {
}
}

@ -1,27 +1,30 @@
package space.caoshd.otone.util;
import org.junit.jupiter.api.Test;
class StrUtilsTest {
import org.junit.Test;
public class StrUtilsTest {
@Test
void last() {
public void last() {
}
@Test
void first() {
public void first() {
}
@Test
void removePrefix(){
public void removePrefix() {
String username = StrUtils.removePrefix("t_user_name", "t_");
System.out.println(username);
}
@Test
void toCamelCase() {
public void toCamelCase() {
String userName = StrUtils.toCamelCase("user_name", false);
String className = StrUtils.toCamelCase("class_name", true);
System.out.println(userName);
System.out.println(className);
}
}

@ -1,44 +1,37 @@
project.path.base=D:/workspace/otono-debug/
#project.path.java=src/main/java
#project.path.resources=src/main/resources
package.name.base=space.caoshd.navigator
package.name.po=repository.po
package.name.mapper=repository.mapper
package.name.service=service
package.name.query=controller.query
package.name.form=controller.form
package.name.view=controller.view
package.name.controller=controller
module.multiple=false
module.name.as_package_base=false
module.name.controller=controller
module.name.repository=data
module.name.service=cmpt
java.name.suffix.service=Service
java.name.suffix.controller=Controller
java.name.suffix.view=View
java.name.suffix.form=Form
java.name.suffix.query=Query
java.name.suffix.mapper=Mapper
java.name.suffix.po=
#package.name.po=repository.po
#package.name.mapper=repository.mapper
package.name.service=service.impl
package.name.service.interface=service
#package.name.query=controller.query
#package.name.form=controller.form
#package.name.view=controller.view
#package.name.controller=controller
#module.multiple=false
#module.name.as_package_base=false
#module.name.controller=controller
#module.name.repository=data
#module.name.service=cmpt
#java.name.suffix.service=Service
#java.name.suffix.controller=Controller
#java.name.suffix.view=View
#java.name.suffix.form=Form
#java.name.suffix.query=Query
#java.name.suffix.mapper=Mapper
#java.name.suffix.po=
#database.name.schemas=otone
#database.name.tables=
database.table.prefixes=t_,m_
template.path.po=template/po.vm
template.path.view=template/view.vm
template.path.form=template/form.vm
template.path.query=template/query.vm
template.path.controller=template/controller.vm
template.path.service=template/service.vm
template.path.service_interface=template/service.interface/po.vm
template.path.mapper=template/mapper.vm
template.path.mapper_xml=template/mapper.xml.vm
output.cover_if_exists=false
#template.path.po=template/po.vm
#template.path.view=template/view.vm
#template.path.form=template/form.vm
#template.path.query=template/query.vm
#template.path.controller=template/controller.vm
#template.path.service=template/service.vm
#template.path.service.interface=template/service.interface/po.vm
#template.path.mapper=template/mapper.vm
#template.path.mapper.xml=template/mapper.xml.vm
output.cover_if_exists=true

@ -0,0 +1,4 @@
package ${context.packageName};
public class ${context.className}$!{context.classNameSuffix} {
}

@ -0,0 +1,4 @@
package ${context.packageName};
public class ${context.className}$!{context.classNameSuffix} {
}

@ -0,0 +1,4 @@
package ${context.packageName};
public class ${context.className}$!{context.classNameSuffix} {
}

@ -1 +1,4 @@
${table.beanName}
package ${context.packageName};
public class ${context.className}$!{context.classNameSuffix} {
}

@ -0,0 +1,4 @@
package ${context.packageName};
public class ${context.className}$!{context.classNameSuffix} {
}

@ -0,0 +1,4 @@
package ${context.packageName};
public class $!{context.classNamePrefix}${context.className}$!{context.classNameSuffix} {
}

@ -0,0 +1,4 @@
package ${context.packageName};
public class ${context.className}$!{context.classNameSuffix} {
}

@ -1 +1,4 @@
${table.beanName}
package ${context.packageName};
public class ${context.className}$!{context.classNameSuffix} {
}
Loading…
Cancel
Save