基于ruoyi框架开发代码生成器
下载ruoyi源码Velocity Engine Core(Velocity引擎核心)是一个用于生成文本的模板引擎,它是Apache Velocity项目的一部分。Velocity Engine Core 使用 Velocity 模板语言,允许用户在模板中插入变量、条件语句、循环等逻辑,最终生成所需的文本输出。Velocity Engine Core 提供了一个简单而灵活的模板引擎,通常用于生成动
springboot基于ruoyi框架开发代码生成器
关于ruoyi框架的代码生成器
下载ruoyi源码
https://gitee.com/y_project/RuoYi
Velocity Engine Core(Velocity引擎核心)是一个用于生成文本的模板引擎,它是Apache Velocity项目的一部分。Velocity Engine Core 使用 Velocity 模板语言,允许用户在模板中插入变量、条件语句、循环等逻辑,最终生成所需的文本输出。
Velocity Engine Core 提供了一个简单而灵活的模板引擎,通常用于生成动态内容,比如生成代码、网页、电子邮件模板等。它支持模板文件和字符串模板,并提供了丰富的工具和方法来处理模板中的数据和逻辑。
第一步:编写模板引擎初始化方法
第二步:编写模板引擎工具类
创建代码生成器的实际过程就是
创建代码生成的模板信息,初始化Velocity引擎,将模板信息写入到模板中
这里只说明domain.java.vm这一个模板方法
第三步:创建虚拟模板
第四步:调用上述方法,完成模板内数据的填充以及文件的创建
分析完整个ruoyi框架中的代码生成器,现在我们进行代码生成器的集成
springboot集成velocity
注意事项
模板引擎中的数据信息这里与ruoyi框架不同的是减少了mapper.xml文件的编写且没有ruoyi框架中对crud以及树形操作的代码
1.添加maven依赖
<!--velocity模板引擎-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
springboot的版本,这边选用的是2.3.2.RELEASE,
当时在开发的过程中是希望在局域网条件下,可以直接通过连接其他人的电脑数据库服务,方便使用,不需要将表中数据导入到部署服务的数据库中,且不需要使用动态数据源
2.编写模板引擎初始化方法
public class VelocityInitializer
{
/**
* 初始化vm方法
*/
public static void initVelocity()
{
Properties p = new Properties();
try
{
// 加载classpath目录下的vm文件
p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
// 定义字符集
p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8);
// 初始化Velocity引擎,指定配置Properties
Velocity.init(p);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
}
3.编写模板引擎工具类
public class VelocityUtils {
/**
* 项目空间路径
*/
private static final String PROJECT_PATH = "main/java";
/**
* html空间路径
*/
private static final String TEMPLATES_PATH = "main/resources/templates";
/**
* 获取模板信息
*
* @return 模板列表
*/
public static List<String> getTemplateList() {
List<String> templates = new ArrayList<String>();
templates.add("vm/java/domain.java.vm");
templates.add("vm/java/dto.java.vm");
templates.add("vm/java/vo.java.vm");
templates.add("vm/java/mapper.java.vm");
templates.add("vm/java/service.java.vm");
templates.add("vm/java/serviceImpl.java.vm");
templates.add("vm/java/controller.java.vm");
templates.add("vm/java/mapping.java.vm");
return templates;
}
private static VelocityContext getContext(GenerateTable genTable) {
VelocityContext context = new VelocityContext();
String packageName = GenConfig.getPackageName();
String author = GenConfig.getAuthor();
context.put("packageName", packageName);
context.put("moduleName", genTable.getClassName());
context.put("author", author);
context.put("functionName", genTable.getClassName());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
context.put("datetime", simpleDateFormat.format(new Date()));
context.put("tableName", genTable.getTableName());
context.put("className", genTable.getClassName());
context.put("moduleName", genTable.getClassName().replaceAll("([A-Z])", "/$1").toLowerCase().replaceFirst("/", ""));
List<GenTableColumn> list = genTable.getList();
ArrayList<Map<String, String>> maps = new ArrayList<>();
for (GenTableColumn genTableColumn : list) {
Map<String, String> column1 = new HashMap<>();
column1.put("columnComment", genTableColumn.getColumnComment());
column1.put("javaType", genTableColumn.getJavaType());
column1.put("javaField", genTableColumn.getJavaField());
column1.put("columnName", genTableColumn.getColumnName());
maps.add(column1);
}
context.put("columns", maps);
return context;
}
public static void writeFile(String template, GenerateTable genTable, String absolutePath) {
VelocityContext context = getContext(genTable);
try (StringWriter sw = new StringWriter()) {
Template tpl = Velocity.getTemplate(template, "UTF-8");
tpl.merge(context, sw);
String fileName = getFileName(template, genTable);
if (StringUtils.isBlank(fileName)) {
return;
}
String realFilePath = absolutePath + "/" + fileName;
FileUtils.writeStringToFile(new File(realFilePath), sw.toString(), "UTF-8");
} catch (IOException e) {
throw new RuntimeException();
}
}
/**
* 获取文件名
*/
public static String getFileName(String template, GenerateTable genTable) {
// 文件名称
String fileName = "";
// 包路径
String packageName = GenConfig.getPackageName();
// 大写类名
String className = genTable.getClassName();
// 业务名称
String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/");
String htmlPath = TEMPLATES_PATH + "/" + StringUtils.replace(packageName, ".", "/");
if (template.contains("domain.java.vm")) {
fileName = StringUtils.format("{}/domain/entity/{}.java", javaPath, className);
} else if (template.contains("mapper.java.vm")) {
fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className);
} else if (template.contains("service.java.vm")) {
fileName = StringUtils.format("{}/service/{}Service.java", javaPath, className);
} else if (template.contains("serviceImpl.java.vm")) {
fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className);
} else if (template.contains("controller.java.vm")) {
fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className);
} else if (template.contains("dto.java.vm")) {
fileName = StringUtils.format("{}/domain/dto/{}Dto.java", javaPath, className);
} else if (template.contains("vo.java.vm")) {
fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className);
} else if (template.contains("mapping.java.vm")) {
fileName = StringUtils.format("{}/domain/mapping/{}Mapping.java", javaPath, className);
}
return fileName;
}
}
4.调用方法完成创建以及文件下载操作
public void getTableData(List<String> tableNames, String clientId, HttpServletResponse response) {
List<GenerateTable> generateTables = new ArrayList<>();
for (String tableName : tableNames) {
List<GenTableColumn> data = getData(tableName, clientId);
generateTables.add(new GenerateTable(data, tableName, StringUtils.toCamelCase(tableName).substring(0, 1).toUpperCase() + StringUtils.toCamelCase(tableName).substring(1)));
}
// 初始化vm
VelocityInitializer.initVelocity();
processingFile(generateTables);
// 获取文件夹地址,打包成zip
String realPath = getRealPath()+"/main";
// 打包,删除文件夹
File zipFile = ZipUtil.zip(realPath, getRealPath() + "/" + System.currentTimeMillis() + ".zip");
// 设置响应头
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"download.zip\"");
// 写入响应输出流
OutputStream outputStream = null;
FileInputStream fis = null;
try {
outputStream = response.getOutputStream();
fis = new FileInputStream(zipFile);
IoUtil.copy(fis, outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (!Objects.isNull(outputStream)) {
outputStream.close();
}
if (!Objects.isNull(fis)) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 删除map里的值,完成跳转到首页
map.remove(clientId);
FileUtil.del(getRealPath());
}
最后,上述的项目大家可以通过https://download.csdn.net/download/m0_56512023/89392583进行下载。
更多推荐
所有评论(0)