所以,根据公司现有框架,开发一款统一风格的代码生成器还是很有必要的。
技术选型
开发框架:SpringBoot+JPA,考虑到会生成各种前后端代码文件,这里我们选用freemarker模板引擎来制作相应的模板。
实现思路
获取表结构信息
首先我们定义一个实体类,为了使用方便,把表和字段信息放到了一个类中:
/**
- 表以及相关字段信息
*/
@Data
public class AppGen extends PageBean implements Serializable {
/**
- 表名
*/
private String tableName;
/**
- 实体类名
*/
private String entityName;
/**
- 实体类名 首字母小写
*/
private String lowerEntityName;
/**
- 表备注
*/
private String tableComment;
/**
- 表前缀
*/
private String prefix;
/**
- 功能描述
*/
private String function;
/**
- 列名
*/
private String columnName;
/**
- 实体列名
*/
private String entityColumnName;
/**
- 列描述
*/
private String columnComment;
/**
- 类型
*/
private String dataType;
/**
- 自增
*/
private Object columnExtra;
/**
- 长度
*/
private Object columnLength;
private List list;
}
获取表列表:
@Override
@Transactional(readOnly = true)
public Result list(AppGen gen){
String countSql = "SELECT COUNT(*) FROM information_schema.tables ";
countSql +=“WHERE table_schema=‘tools’”;
Long totalCount = dynamicQuery.nativeQueryCount(countSql);
PageBean data = new PageBean<>();
if(totalCount>0){
String nativeSql = "SELECT table_name as tableName,table_comment as tableComment ";
nativeSql+=“FROM information_schema.tables WHERE table_schema=‘tools’”;
Pageable pageable = PageRequest.of(gen.getPageNo(),gen.getPageSize());
List list = dynamicQuery.nativeQueryPagingListModel(AppGen.class,pageable, nativeSql);
data = new PageBean<>(list, totalCount);
}
return Result.ok(data);
}
制作模板
模板太多了,这里只以Controller模板为例,贴一下实现代码,更多模板见源码:
package com.tools.module.${prefix}.web;
import com.tools.common.config.AbstractController;
import com.tools.common.model.Result;
import com.tools.module. p r e f i x . e n t i t y . {prefix}.entity. prefix.entity.{entityName};
import com.tools.module. p r e f i x . s e r v i c e . {prefix}.service. prefix.service.{entityName}Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(“/ p r e f i x / {prefix}/ prefix/{function}”)
public class ${entityName}Controller extends AbstractController {
@Autowired
private ${entityName}Service ${function}Service;
/**
- 列表
*/
@PostMapping(“/list”)
public Result list(${entityName} ${function}){
return f u n c t i o n S e r v i c e . l i s t ( {function}Service.list( functionService.list({function});
}
/**
- 查询
*/
@PostMapping(“/get”)
public Result get(Long id){
return ${function}Service.get(id);
}
/**
- 保存
*/
@PostMapping(“/save”)
public Result save(@RequestBody ${entityName} ${function}){
return f u n c t i o n S e r v i c e . s a v e ( {function}Service.save( functionService.save({function});
}
/**
- 删除
*/
@PostMapping(“/delete”)
public Result delete(Long id){
return ${function}Service.delete(id);
}
}
说白了其实就是传递参数,把一些可变的代码片段使用${name}形式编写。
代码生成
有点长,慢慢看,其实就是渲染各种前后端模板:
/**
- 生成代码
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/c22b70b30f10670360013a5441a74d12.jpeg)
最后
金三银四到了,送上一个小福利!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
/img-community.csdnimg.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
最后
金三银四到了,送上一个小福利!
[外链图片转存中…(img-5loT1a2P-1711823268913)]
[外链图片转存中…(img-p8cbvkKe-1711823268914)]
[外链图片转存中…(img-K7yQG2wk-1711823268914)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!