Code Generate 代码生成器 V1.0
Code Generate V1.0 代码生成器
根据配置的模板,根据建表语句,生成Code。
例如java代码、vue代码、jsp代码以及html代码等等,均可根据自己的代码写作习惯进行配置。
缺点:配置的模板,需要在工程里面写死,不够灵活。
页面
Java
包括常用 Controller、Service、Mapper、Entity;

Vue
以Element-UI代码为例,表格、增加、删除、修改;

themyleaf
基于Layui 表格、增加、删除、修改;

Jsp
基于Layui 表格、增加、删除、修改;

测试样例
建表语句
CREATE TABLE `course`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`course_no` int(11) DEFAULT NULL COMMENT '课程编号',
`course_name` varchar(255) DEFAULT NULL COMMENT '课程名称',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
测试
以生成Java实体类为例
package ${packageName}.entity;
import java.util.Date;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import java.io.Serializable;
/**
* (${className})表实体类
*
* @author ${author}
* @since ${date}
*/
@Data
public class ${className} extends Model<${className}> {
<#list fieldList as field>
/**
* ${field.comment}
*/
private ${field.type} ${field.name};
</#list>
}
Result
package com.java.entity;
import java.util.Date;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import java.io.Serializable;
/**
* (Course)表实体类
*
* @author HelloWorld
* @since 2023-03-14 14:38:05
*/
@Data
public class Course extends Model<Course> {
/**
* 主键ID
*/
private Integer id;
/**
* 课程编号
*/
private Integer courseNo;
/**
* 课程名称
*/
private String courseName;
/**
* 创建时间
*/
private Date createTime;
/**
* 创建人
*/
private String creator;
}

Code
依赖
只列出关键依赖
<!--freemarker依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
TemplateService.java
@Service
public class TemplateService {
@Autowired
private ResourceLoader resourceLoader;
/**
* 统一 返回代码段
*
* @param tem 模板实体
* @return
* @throws IOException
*/
public String commonReturnCode(TemplateEntity tem) throws IOException {
//template:resource目录下的ftl文件放置目录
SpringTemplateLoader templateLoader = new SpringTemplateLoader(resourceLoader, "classpath:templates");
// 创建配置实例
Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
// 设置编码
configuration.setDefaultEncoding(StandardCharsets.UTF_8.name());
configuration.setTemplateLoader(templateLoader);
try {
// 获取模板
Template template = configuration.getTemplate(tem.getTemplatePath()+tem.getTemplateName());
StringWriter writer = new StringWriter();
template.process(tem.getParams(), writer);
return writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
GenerateService.java
@Service
public class GenerateService {
@Resource
private TemplateService templateService;
/**
* 生成java代码
*
* @param typeList 需要的类型 例如 1:entity 2:mapper 等等
* @return
*/
public Result generateJavaCode(String sql ,String author,String packageName, List<Integer> typeList) {
// 接收结果
Map<String, String> result = new HashMap<>();
POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","",packageName,author);
Map<String, Object> params = new HashMap<>();
// 作者名
params.put("author",author);
// 类名
params.put("className",pojOmaker.getClassName());
// 字段集
params.put("fieldList",pojOmaker.getFieldList());
// 包名
params.put("packageName",pojOmaker.getPackageName());
// 创建时间
params.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
typeList.forEach(type -> {
// 实体类
if (type == ENTITY_TYPE) {
String code = "";
try {
code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Entity.java.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("entity",code);
}
// Mapper 层
if (type == MAPPER_TYPE) {
String code = "";
try {
code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Mapper.java.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("mapper",code);
}
// service层
if (type == SERVICE_TYPE) {
String code = "";
try {
code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Service.java.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("service",code);
}
// serviceImpl 实现
if (type == SERVICE_IMPL_TYPE) {
String code = "";
try {
code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"ServiceImpl.java.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("serviceImpl",code);
}
// controller
if (type == CONTROLLER_TYPE) {
String code = "";
try {
code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Controller.java.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("controller",code);
}
});
return Result.success("success",result);
}
/**
* 生成vue 代码
* @return
*/
public Result generateVueCode(String sql){
POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","","","");
// 接收结果
Map<String, String> result = new HashMap<>();
// 参数
Map<String, Object> params = new HashMap<>();
// 字段
params.put("fieldList",pojOmaker.getFieldList());
// 类名
params.put("className",pojOmaker.getClassName());
// 生成表格
String vue = "";
try {
vue = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_VUE,"Table.vue.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("vue",vue);
// 生成弹窗
String dialog = "";
try {
dialog = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_VUE,"Dialog.vue.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("dialog",dialog);
return Result.success("success",result);
}
/**
* 生成JSP代码
* @return
*/
public Result generateJspCode(String sql,String author){
POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","","","");
// 接收结果
Map<String, String> result = new HashMap<>();
// 参数
Map<String, Object> params = new HashMap<>();
// 字段
params.put("fieldList",pojOmaker.getFieldList());
// 类名
params.put("className",pojOmaker.getClassName());
// 作者名
params.put("author",author);
// 创建时间
params.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
// 生成表格
String html = "";
try {
html = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JSP,"index.jsp.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("jsp",html);
// 生成弹窗
String js = "";
try {
js = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JSP,"index.js.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("js",js);
return Result.success("success",result);
}
/**
* 生成ThemyLeaf 代码
* @return
*/
public Result generateThemyLeafCode(String sql){
POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","","","");
// 接收结果
Map<String, String> result = new HashMap<>();
// 参数
Map<String, Object> params = new HashMap<>();
// 字段
params.put("fieldList",pojOmaker.getFieldList());
// 类名
params.put("className",pojOmaker.getClassName());
// 生成表格
String html = "";
try {
html = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_THEMYLEAF,"index.html.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("html",html);
// 生成弹窗
String js = "";
try {
js = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_THEMYLEAF,"index.js.ftl"));
} catch (IOException e) {
throw new RuntimeException(e);
}
result.put("js",js);
return Result.success("success",result);
}
/**
* mapper 在系统内部
*/
public void generateMapper() {
Configuration configuration = new Configuration(new Version("2.3.3"));
configuration.setDefaultEncoding("utf-8");
String absolutePath = System.getProperty("user.dir") + "\\src\\main\\resources\\templates";
try {
// 加载.ftl配置文件所在路径
configuration.setDirectoryForTemplateLoading(new File(absolutePath));
// 放模板变量的值
Map<String, Object> params = new HashMap<>();
params.put("package", "io.demo.generator");
params.put("mapper", "dao");
params.put("author", "xxx");
params.put("date", "2022-06-03");
params.put("comments", "freemarker模板");
params.put("className", "GenerateFile");
params.put("mapperSuffix", "Mapper");
//给文件赋值
Template template = configuration.getTemplate("Mapper.java.ftl");
// 文件输出路径
FileOutputStream file = new FileOutputStream("C:\\Users\\最可爱的WXQ\\Desktop\\文件资源\\GenerateFileMapper.java");
OutputStreamWriter out = new OutputStreamWriter(file, "utf-8");
template.process(params, out);
out.close();
} catch (IOException | TemplateException exception) {
exception.printStackTrace();
}
}
}
GenerateController.java
/**
* Code 接口
*/
@RestController
@RequestMapping("code")
public class GenerateController {
@Resource
private GenerateService generateService;
/**
* 生成java代码
*
* @return
*/
@PostMapping("/generateJavaCode")
public Result generateJava(@RequestBody BaseInfo baseInfo) {
return generateService.generateJavaCode(baseInfo.getSql(), baseInfo.getAuthor(), baseInfo.getPackageName(), baseInfo.getType());
}
/**
* 生成Vue Code
*
* @return
*/
@PostMapping("/generateVueCode")
public Result generateVue(@RequestBody BaseInfo baseInfo) {
return generateService.generateVueCode(baseInfo.getSql());
}
/**
* 生成ThemyLeaf Code
*
* @return
*/
@PostMapping("/generateThemyLeafCode")
public Result generateThemyLeaf(@RequestBody BaseInfo baseInfo) {
return generateService.generateThemyLeafCode(baseInfo.getSql());
}
/**
* 生成 JSP Code
*
* @return
*/
@PostMapping("/generateJspCode")
public Result generateJsp(@RequestBody BaseInfo baseInfo) {
return generateService.generateJspCode(baseInfo.getSql(),baseInfo.getAuthor());
}
}
前端的代码,只需要调用接口即可。
Code Generate 代码生成器 V1.0的更多相关文章
- RDIFramework.NET平台代码生成器V1.0发布(提供下载)
RDIFramework.NET平台代码生成器V1.0发布(提供下载) RDIFramework.NET(.NET快速开发整合框架)框架做为信息化系统快速开发.整合的框架,其目的一至是给用户和开发 ...
- Windows环境下Android Studio v1.0安装教程
Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...
- SQL防注入程序 v1.0
/// ***************C#版SQL防注入程序 v1.0************ /// *使用方法: /// 一.整站防注入(推荐) /// 在Global.asax.cs中查找App ...
- 【转】Windows环境下Android Studio v1.0安装教程
原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...
- [iOS UI进阶 - 2.0] 彩票Demo v1.0
A.需求 1.模仿“网易彩票”做出有5个导航页面和相应功能的Demo 2.v1.0 版本搭建基本框架 code source:https://github.com/hellovoidworld/H ...
- ZXing工具类v1.0
package com.jadyer.util; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import jav ...
- MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能...
MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能... MingQQ目前支持的功能如下:1.支持普通方式登录.验证码方式登录.注销.保持在线.改变在线状态.2.支持 ...
- MathExam小学一二年级计算题生成器V1.0
MathExam小学一二年级计算题生成器v1.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning ...
- Python WSGI v1.0 中文版(转)
add by zhj: WSGI全称Web Server Gateway Interface,即Web网关接口.其实它并不是OSI七层协议中的协议,它就是一个接口而已,即函数,而WSGI规定了该接口的 ...
- 安卓开发开发规范手册V1.0
安卓开发开发规范手册V1.0 之前发布过一份Web安全开发规范手册V1.0,看到收藏文章的读者挺多,发现整理这些文档还挺有意义. 最近周末抽了些时间把之前收集关于安卓安全开发的资料也整理了一下,整理出 ...
随机推荐
- linux防火墙开放1521端口
问题描述:使用plsql连接数据库发现TNS报错,登录服务器发现防火墙开放,如果直接关闭防火墙,所有的端口都可以连接,但是实际中可能会遇到开启防火墙的库,这时候需要开放单一端口对某一服务器或者某一网段 ...
- Carla 自动驾驶仿真平台的安装与配置指南
简介 Carla 是一款基于 Python 编写和 UE(虚幻引擎)的开源仿真器,用于模拟自动驾驶车辆在不同场景下的行为和决策.它提供了高度可定制和可扩展的驾驶环境,包括城市.高速公路和农村道路等.C ...
- SpringBoot 配置CORS处理前后端分离跨域配置无效问题解析
前言 浏览器有跨域限制,非同源策略(协议.主机名或端口不同)被视为跨域请求,解决跨域有跨域资源共享(CORS).反向代理和 JSONP的方式.本篇通过 SpringBoot 的资源共享配置(CORS) ...
- AI 绘画咒语入门 - Stable Diffusion Prompt 语法指南 【成为初级魔导士吧!】
要用好 Stable Diffusion,最最重要的就是掌握 Prompt(提示词).由于提示词对于生成图的影响甚大,所以被称为魔法,用得好惊天动地,用不好魂飞魄散 . 因此本篇整理下提示词的语法(魔 ...
- WPF 屏幕点击的设备类型
1.鼠标 可以通过Mouse相关的事件参数MouseButtonEventArgs中的数据,e.StylusDecice==null表示没有触摸设备,所以设备为鼠标 2.触笔 or 触摸 根据Styl ...
- CSS 点击穿透pointer-events
在项目中,当需要展示一个元素在最顶层,但又不想让它影响下层的交互,可以pointer-events:none pointer-events介绍 pointer-events: auto | none ...
- flutter系列之:做一个修改组件属性的动画
目录 简介 flutter中的动画widget AnimatedContainers使用举例 总结 简介 什么是动画呢?动画实际上就是不同的图片连续起来形成的.flutter为我们提供了一个Anima ...
- 2步打通ModelArts和Astro,实现AI应用快速落地
摘要:本文以 ModelArts 的"找云宝"自动学习 AI 应用为例,结合低代码平台 Astro 轻应用快速实现一个"找云宝"小应用. 本文分享自华为云社区& ...
- 2021-04-16:摆放着n堆石子。现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。求出将n堆石子合并成一堆的最小得分(或最大得分)合
2021-04-16:摆放着n堆石子.现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.求出将n堆石子合并成一堆的最小得分(或最大得分)合 ...
- Python忽略NoData计算多张遥感影像的像元平均值:whitebox库
本文介绍基于Python中whitebox模块,对大量长时间序列栅格遥感影像的每一个像元进行忽略NoData值的多时序平均值求取. 在文章Python ArcPy批量计算多时相遥感影像的各像元 ...