从零开始,手打一个权限管理系统(第二十章 代码生成器)

第二十章 代码生成器

前言

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


一、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文件下面


微信截图_20240307111941.png

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开头的类的代码。
最终效果如下,可以一次生成八个文件代码,大大节省了体力。


微信截图_20240307140129.png

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

当前版本tag:2.0.6
代码仓库


四、 体验地址

后台数据库只给了部分权限,报错属于正常!
想学的老铁给点点关注吧!!!
欢迎留言交流!!!

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。