新增: 基于配置生成文件名

master
曹世达 6 months ago
parent f4e9276a83
commit c5e34d2f54

@ -0,0 +1,66 @@
package space.caoshd.otone.builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.entity.OutputInfo;
import space.caoshd.otone.entity.TableInfo;
import space.caoshd.otone.tool.PropTools;
import space.caoshd.otone.util.CfgConsts;
import space.caoshd.otone.util.FileUtils;
import space.caoshd.otone.util.PathConsts;
import space.caoshd.otone.util.VelocityUtils;
import java.nio.file.Paths;
public class OutputBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(OutputBuilder.class);
private static final PropTools CONFIG = new PropTools(PathConsts.CONFIG_PROPERTIES_PATH);
private final OutputInfo outputInfo;
public OutputBuilder(OutputInfo outputInfo) {
this.outputInfo = outputInfo;
}
public void build() {
// 循环表信息 创建代码文件
for (TableInfo tableInfo : outputInfo.getTableInfoList()) {
// 创建数据文件夹
FileUtils.mkdir(outputInfo.getPackagePath());
// 获取输出文件路径
String outputPath = getOutputPath(tableInfo.getBeanName());
// 获取模板文件路径
String templatePath = outputInfo.getTemplatePath();
// 判断输出文件是否已存在
if (!FileUtils.exists(outputPath)) {
// 输出文件不存在 直接生成
VelocityUtils.render(CfgConsts.VALUE_TABLE, tableInfo, templatePath, outputPath);
}
// 输出文件存在 判断是否可以覆盖
if (CONFIG.getBoolean(CfgConsts.OUTPUT_COVER_IF_EXIST)) {
// 配置可以执行覆盖 覆盖生成
VelocityUtils.render(CfgConsts.VALUE_TABLE, tableInfo, templatePath, outputPath);
} else {
// 配置不可以执行覆盖 提示错误消息
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
);
}
}
}
private String getOutputPath(String beanName) {
String filename = getOutputFilename(beanName);
return Paths.get(outputInfo.getPackagePath(), filename).toString();
}
private String getOutputFilename(String beanName) {
return beanName + outputInfo.getNameSuffix() + ".java";
}
}

@ -1,62 +0,0 @@
package space.caoshd.otone.builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.entity.TableInfo;
import space.caoshd.otone.tool.PropTools;
import space.caoshd.otone.util.CfgConsts;
import space.caoshd.otone.util.FileUtils;
import space.caoshd.otone.util.PathConsts;
import space.caoshd.otone.util.PathUtils;
import space.caoshd.otone.util.VelocityUtils;
import java.util.List;
public class PoBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(PoBuilder.class);
private static final PropTools CONFIG = new PropTools(PathConsts.CONFIG_PROPERTIES_PATH);
private final List<TableInfo> tableInfoList;
private String templatePath = PathConsts.PO_TEMPLATE_PATH;
public PoBuilder(List<TableInfo> tableInfoList) {
this.tableInfoList = tableInfoList;
}
public PoBuilder setTemplatePath(String templatePath) {
this.templatePath = templatePath;
return this;
}
public void build() {
for (TableInfo tableInfo : tableInfoList) {
String beanName = tableInfo.getBeanName();
String packagePath = PathUtils.getPoPackagePath();
FileUtils.mkdir(packagePath);
String outputPath = PathUtils.getPoJavaPath(beanName);
if (FileUtils.exists(outputPath)) {
if (CONFIG.getBoolean(CfgConsts.OUTPUT_COVER_IF_EXIST)) {
VelocityUtils.render(
CfgConsts.VALUE_TABLE,
tableInfo,
templatePath,
outputPath
);
} else {
LOGGER.warn(
"po file already exists: {}, "
+ "please remove it or enable auto cover exist file,"
+ " config.properties should like [output.cover_if_exists=true]",
outputPath
);
}
} else {
VelocityUtils.render(CfgConsts.VALUE_TABLE, tableInfo, templatePath, outputPath);
}
}
}
}

@ -0,0 +1,46 @@
package space.caoshd.otone.entity;
import java.util.List;
public class OutputInfo {
private List<TableInfo> tableInfoList;
private String templatePath;
private String packagePath;
private String nameSuffix;
public List<TableInfo> getTableInfoList() {
return tableInfoList;
}
public void setTableInfoList(List<TableInfo> tableInfoList) {
this.tableInfoList = tableInfoList;
}
public String getTemplatePath() {
return templatePath;
}
public void setTemplatePath(String templatePath) {
this.templatePath = templatePath;
}
public String getPackagePath() {
return packagePath;
}
public void setPackagePath(String packagePath) {
this.packagePath = packagePath;
}
public String getNameSuffix() {
return nameSuffix;
}
public void setNameSuffix(String nameSuffix) {
this.nameSuffix = nameSuffix;
}
}

@ -2,12 +2,23 @@ package space.caoshd.otone.util;
public class PathConsts { public class PathConsts {
// 配置文件路径
public static final String DATASOURCE_PROPERTIES_PATH = "config/datasource.properties"; public static final String DATASOURCE_PROPERTIES_PATH = "config/datasource.properties";
public static final String CONFIG_PROPERTIES_PATH = "config/config.properties"; public static final String CONFIG_PROPERTIES_PATH = "config/config.properties";
public static final String MYSQL_PROPERTIES_PATH = "config/mysql.properties"; public static final String MYSQL_PROPERTIES_PATH = "config/mysql.properties";
public static final String VELOCITY_PROPERTIES_PATH = "config/velocity.properties"; public static final String VELOCITY_PROPERTIES_PATH = "config/velocity.properties";
public static final String RESOURCES_PATH = "config/velocity.properties"; public static final String RESOURCES_PATH = "config/velocity.properties";
// 模板文件路径
public static final String PO_TEMPLATE_PATH = "template/po.vm"; public static final String PO_TEMPLATE_PATH = "template/po.vm";
public static final String VIEW_TEMPLATE_PATH = "template/view.vm";
public static final String FORM_TEMPLATE_PATH = "template/form.vm";
public static final String QUERY_TEMPLATE_PATH = "template/query.vm";
public static final String CONTROLLER_TEMPLATE_PATH = "template/controller.vm";
public static final String SERVICE_TEMPLATE_PATH = "template/service.vm";
public static final String SERVICE_INTERFACE_TEMPLATE_PATH = "service.interface/po.vm";
public static final String MAPPER_TEMPLATE_PATH = "template/mapper.vm";
public static final String MAPPER_XML_TEMPLATE_PATH = "template/mapper.xml.vm";
public PathConsts() {} public PathConsts() {}

@ -0,0 +1,46 @@
package space.caoshd.otone.builder;
import org.junit.jupiter.api.Test;
import space.caoshd.otone.entity.OutputInfo;
import space.caoshd.otone.entity.TableInfo;
import space.caoshd.otone.util.PathConsts;
import space.caoshd.otone.util.PathUtils;
import java.util.List;
class OutputBuilderTest {
@Test
void build() {
String[] templates = {
PathConsts.VIEW_TEMPLATE_PATH,
PathConsts.FORM_TEMPLATE_PATH,
PathConsts.QUERY_TEMPLATE_PATH,
PathConsts.CONTROLLER_TEMPLATE_PATH,
PathConsts.SERVICE_TEMPLATE_PATH,
PathConsts.SERVICE_INTERFACE_TEMPLATE_PATH,
PathConsts.MAPPER_TEMPLATE_PATH,
PathConsts.MAPPER_XML_TEMPLATE_PATH,
PathConsts.PO_TEMPLATE_PATH,
};
TableBuilder tableBuilder = new TableBuilder();
List<TableInfo> tableInfoList = tableBuilder.build();
// OutputInfo poOutputInfo = new OutputInfo();
// poOutputInfo.setTableInfoList(tableInfoList);
// poOutputInfo.setTemplatePath(PathConsts.PO_TEMPLATE_PATH);
// poOutputInfo.setPackagePath(PathUtils.getPoPackagePath());
// new OutputBuilder(poOutputInfo).build();
OutputInfo voOutputInfo = new OutputInfo();
voOutputInfo.setTableInfoList(tableInfoList);
voOutputInfo.setNameSuffix("View");
voOutputInfo.setTemplatePath(PathConsts.VIEW_TEMPLATE_PATH);
voOutputInfo.setPackagePath(PathUtils.getViewPackagePath());
new OutputBuilder(voOutputInfo).build();
}
}

@ -1,18 +0,0 @@
package space.caoshd.otone.builder;
import org.junit.jupiter.api.Test;
import space.caoshd.otone.entity.TableInfo;
import java.util.List;
class PoBuilderTest {
@Test
void build(){
TableBuilder tableBuilder = new TableBuilder();
List<TableInfo> tableInfoList = tableBuilder.build();
PoBuilder poBuilder = new PoBuilder(tableInfoList);
poBuilder.build();
}
}

@ -30,5 +30,5 @@ output.cover_if_exists=false
#database.name.schemas=otone #database.name.schemas=otone
#database.name.tables= #database.name.tables=
#database.table.prefixes=t_,m_ database.table.prefixes=t_,m_

@ -1 +1 @@
file.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader resource.loader.file.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
Loading…
Cancel
Save