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(二)文件权限和压缩
1 搜索查找类 1.1 查找定位文件 find <搜索范围.路径> <选项> find将从指定目录下递归地遍历其各个子目录,将满足条件的文件显示在终端. 选项说明 -name: ...
- VUE3企业级项目基础框架搭建流程(3)
VUE-Router npm install vue-router@4 安装完成后,在项目目录里新建一个router文件,我这里的用的是typeScript,所以建立的是router.ts, 该文件是 ...
- Mysql8.0为什么取消了缓存查询的功能
首先我们介绍一下MySQL的缓存机制 [MySQL缓存机制]简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL. 但如果表中任何数 ...
- 人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)
图像风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一幅图像的风格应用到另一幅图像上,从而生成一幅新图像,该新图像结合了两幅原始图像的特点,目的是达到一种风格化叠加的效果,本次我们 ...
- 如何遍历HashMap集合?
在Java中,HashMap是一种常用的数据结构,它提供了快速的查找.插入和删除操作.当我们需要遍历HashMap中的所有元素时,可以利用三种不同的方法实现. 方法一:使用键值对遍历 HashMap中 ...
- springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用oracle存储过程
由于在开发业务时,可能同时调用的存储过程不知道参数,但是参数从界面.或已经存储在数据库的获取,所以就不希望手动写存储过程的参数,通过简化的调用. 能不能写个动态的业务,只输入存储过程名称,自动获取存储 ...
- 「学习笔记」tarjan求最近公共祖先
Tarjan 算法是一种 离线算法,需要使用并查集记录某个结点的祖先结点. 并没有传说中的那么快. 过程 将询问都记录下来,将它们建成正向边和反向边. 在 dfs 的过程中,给走过的节点打上标记,同时 ...
- lombok版本报错问题java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module
lombok版本报错问题 记录一个项目部署时遇到的问题,我本地采用的JDK8的版本,然后我的服务器采用的是JDK17,然后在用maven进行打包的时候,发现package失败. 复现 我在本地采用的l ...
- 可视化—gojs 超多超实用经验分享(一)
目录 1. 设置分组模板,默认样式,统一最小宽度,展开收起状态监听 2. 分组名称显示成员个数: 分组名称+成员个数: name(children) 3. 分组成员为空时,不显示 placeholde ...
- 2023-01-10:智能机器人要坐专用电梯把货物送到指定地点, 整栋楼只有一部电梯,并且由于容量限制智能机器人只能放下一件货物, 给定K个货物,每个货物都有所在楼层(from)和目的楼层(to),
2023-01-10:智能机器人要坐专用电梯把货物送到指定地点, 整栋楼只有一部电梯,并且由于容量限制智能机器人只能放下一件货物, 给定K个货物,每个货物都有所在楼层(from)和目的楼层(to), ...