Skip to content

第二十章 代码生成器

前言

代码写多就会发现很多都是重复的工作,我是一个比较懒的人,所以我决定写一个代码生成器,用来提高效率;具体思路就是通过模板引擎来生成我所需要的代码,网上有很多开源的优秀项目,但是跟我的代码风格和前端不适配,但是思路都是差不多。

一、Thymeleaf 模板引擎

Thymeleaf 官网地址 这是 Spring 官方推荐的(具体地址),操作也很简单,直接引入 jar 包就可以了。

xml
	<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 的内容

vue
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})]这种表达式就是我们需要替换的变量。

txt
[# th:each="item : ${items}"]
  - [(${item})]
[/]

这种就循环操作;还有其他的语法规则请参考文本模式

三、数据组装

代码的生成其实是根据设计好的表来实现的,所以需要通过 Mysql 数据库里面的 information_schema 这个库来获得相关的信息,像表名,列名,字段类型就可以转换成 java 的类名,属性名,变量类型等,具体可以参考源码中 SysGen 开头的类的代码。

最终效果如下,可以一次生成八个文件代码,大大节省了体力。 在这里插入图片描述

当然生成的代码还需要自己微调一下,这样才能正确运行。

当前版本 tag:2.0.6 代码仓库

四、 体验地址

后台数据库只给了部分权限,报错属于正常!

想学的老铁给点点关注吧!!!

欢迎留言交流!!!

我是阿咕噜,一个从互联网慢慢上岸的程序员,如果喜欢我的文章,记得帮忙点个赞哟,谢谢!