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,看到收藏文章的读者挺多,发现整理这些文档还挺有意义. 最近周末抽了些时间把之前收集关于安卓安全开发的资料也整理了一下,整理出 ...
随机推荐
- ES日志存储以及备份压缩到COS
导语 为了满足用户日益增长的日志存储大小,不影响用户的写入和查询性能.满足不同用户写入流量.同时用户日志长期保存,日志存储比较占用空间和成本.ES集群规格配置高,消耗资源和成本.我们基于Go语言设计了 ...
- 关于 OAuth 你又了解哪些?
作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者. OAuth 的背景 OAuth,O 是 Open,Au ...
- 对doccano自动标注使用的默认UIE模型进行微调以提高特定领域的实体识别能力,提高标注速度
虽然doccano的自动标注使用默认的UIE模型可以识别出一定的实体,但是在特定领域或者因为实体类别名不能被理解很多实体是识别不了的,所以我们可以通过自己标注的数据对模型进行微调来满足我们Auto L ...
- rails的接口查询详解
Retrieving Objects from the Database find "find"是一种常用的数据库查询方法,在Rails中被用于从数据库中查找单个记录.它可以接收一 ...
- mybatis中useGeneratedKeys用法--插入数据库后获取主键值
前言:今天无意在mapper文件中看到useGeneratedKeys这个词,好奇就查了下,发现能解决我之前插入有外键表数据时,这个外键获取繁琐的问题,于是学习敲DEMO记录 在项目中经常需要获 ...
- ffmpeg音视频基础学习
ffmpeg音视频基础学习 从去年开始了解音视频,中间也由于项目的需要,学习过ffmpeg.live555.以及QTAV框架,一直没总结过,现在大致总结下音视频中的常见词汇,后续慢慢更新添加!博客也会 ...
- 飞行时间技术TOF
文章目录 飞行时间技术TOF 一. 光速的测定 二. 各种TOF技术 直接脉冲TOF 脉冲间接TOF 连续波调制TOF(Continous Wave TOF) 三. TOF技术的应用 飞行时间技术TO ...
- Centos7.x 更换Jenkins构建目录
原由:最近因为原来的Jenkins构建目录,已经要满了,想着更换下构建目录,此篇文件简单介绍下更换过程. 注:此文章可能仅适用于我个人,仅供参考.如有其他办法,欢迎评论指教. 查了几种方法,最终选为使 ...
- Jupyter Notebook(或vscode插件) 一个cell有多个输出
方法一 在文件的开头加上如下代码,该方法仅对当前文件有效 from IPython.core.interativeshell import InteractiveShell InteractiveSh ...
- 2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml。请问部署在
2022-12-23:portainer是docker的web可视化工具.如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml.请问部署在 ...