第二十章 代码生成器
前言
代码写多就会发现很多都是重复的工作,我是一个比较懒的人,所以我决定写一个代码生成器,用来提高效率;具体思路就是通过模板引擎来生成我所需要的代码,网上有很多开源的优秀项目,但是跟我的代码风格和前端不适配,但是思路都是差不多。
一、Thymeleaf模板引擎
Thymeleaf官网地址
这是Spring官方推荐的(具体地址),操作也很简单,直接引入jar包就可以了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
</dependency>
由于我需要生成的是java和vue文件,所以需要用到Thymeleaf的文本模式。
二、构建模板文件
我需要对不同类型和功能的文件构建一个通用的模板,这里我构建了【“entity”, “mapper”, “service”, “serviceImpl”, “controller”, “index_td”, “form_td”, “api_td”】八种类型的通用模板,统一存放到了templates文件下面
entity.th的内容
package [(${packageName})].[(${moduleName})].entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.time.LocalDateTime;
/**
* [(${tableComment})]
* @Author [(${author})]
* @create [(${dateTime})]
*/
@Data
public class [(${camelTableName})] {
[# th:each="column : ${columns}"]
[# th:if="!${#strings.isEmpty(column.columnComment)}"]
/**
* [(${column.columnComment})]
*/
[/]
[# th:if="${#strings.equalsIgnoreCase(column.columnName, pk.columnName)}"]
@TableId(type = IdType.ASSIGN_ID)
[/]
private [(${column.attrType})] [(${column.camelColumnName})];
[/]
}
其中[(${camelTableName})]这种表达式就是我们需要替换的变量。
[# th:each="item : ${items}"]
- [(${item})]
[/]
这种就循环操作;还有其他的语法规则请参考文本模式
三、数据组装
代码的生成其实是根据设计好的表来实现的,所以需要通过Mysql数据库里面的information_schema这个库来获得相关的信息,像表名,列名,字段类型就可以转换成java的类名,属性名,变量类型等,具体可以参考源码中SysGen开头的类的代码。
最终效果如下,可以一次生成八个文件代码,大大节省了体力。
当然生成的代码还需要自己微调一下,这样才能正确运行。
当前版本tag:2.0.6
代码仓库
四、 体验地址
后台数据库只给了部分权限,报错属于正常!
想学的老铁给点点关注吧!!!
欢迎留言交流!!!
我是阿咕噜,一个从互联网慢慢上岸的程序员,如果喜欢我的文章,记得帮忙点个赞哟,谢谢!