SpringJpa CRUD代码生成器
利用业余时间撸了一个Spring Jpa代码生成器jpa-codegen。
简介
这是一款基于Freemarker
模板驱动的代码生成器。
依据现有的实体类代码,自动生成CRUD代码,解放双手,加快开发速度。
生成的代码包括但不仅限于(可以自定义生成模块)
- Form表单代码
- Repository代码
- Service代码
- Controller代码
SpringBoot使用示例
克隆示例项目,体会解放双手的美妙感受!
如何使用
导入仓库
1 | maven { |
配置代码生成器
配置文件
1 | ## 作者 |
其中
1 | Repository = |
是模块配置,什么是模块?
编写代码模板
模板主要基于Freemarker
,如Spring Boot2.x
代码模板可以像下面这样
1 | package ${packageName}; |
编写生成器入口
在test模块中编写生成器入口,如
1 | public class Codegen { |
然后运行generate()
,在项目目录下将会生成
生成的代码完全由模板以及实体类信息决定。
如何编写模板?
模板完全基于FreeMarker
以及实体类信息,FreeMarker
参考FreeMarker Docs
支持的元素定义如下
基本信息
Freemarker元素 | 解释 | 示例输出 |
---|---|---|
${ftlName} |
模板名称 | controller.ftl |
${ftlPath} |
模板目录 | src/main/resources/template/ |
${savePath} |
保存路径 | src/main/resources/io/github/gcdd1993/controller |
${packageName} |
java文件包名 | io.github.gcdd1993.controller |
${className} |
java文件类名 | UserController |
${author} |
作者 | gaochen |
${date} |
创建日期,默认为当前日期 | 2019/6/23 |
${comments} |
注释信息 | generated by jpa-codegen |
${imports} |
java文件引入信息 | org.springframework.beans.factory.annotation.Autowired |
实体信息
Freemarker元素 | 解释 | 示例输出 |
---|---|---|
${entity.className} |
实体类名,class.getSimpleName() |
User |
${entity.packageName} |
实体包名,class.getPackage().getName() |
io.github.gcdd1993 |
${entity.tableName} |
实体表名,@Table(name="") |
sys_user |
${entity.id.className} |
实体主键类名,@Id 注释的字段的类名 |
Integer |
${entity.id.packageName} |
实体主键包名,@Id 注释的字段的包名 |
java.lang |
${entity.fields.className} |
实体所有字段(只支持基本类型)类名 | String |
${entity.fields.packageName} |
实体所有字段(只支持基本类型)包名 | java.lang |
${entity.fields.name} |
实体所有字段(只支持基本类型)属性名 | name |
${entity.fields.annotations.className} |
实体所有字段注解的类名 | Id |
${entity.fields.annotations.packageName} |
实体所有字段注解的包名 | javax.persistence |
自定义配置
除了以上默认的信息之外,可能会有额外的信息需要填入生成的代码中,jpa-codegen提供直接将配置文件中的配置渲染到模板的能力。
例如在配置文件autogen.properties
写下一行
1 | this is additional comment = |
在模板中可以使用${otherParams.additional_comment}
获取到该配置。
要注意的是:自定义配置使用custom
开头,后面的**配置会将.替换为_**作为FreeMarker
模板的key,例如上述的additional.comment
使用${otherParams.additional_comment}
获取。
什么是模块?
由于代码千变万化,为了尽可能的做到通用性,jpa-codegen将每一种类型的代码抽象为模块,每一个模块将使用各自的模板,依照实体信息生成代码。
需要为模板配置一下信息:
- repository.suffix=Repository
模块类名后缀,生成的类名规则由实体类名+后缀构成
- repository.template=repository.ftl
模块使用的Freemarker
模板
- repository.flag=entity.repo
模块标识符,生成的代码包名由实体类将实体标识符替换为模块标识符来确认。
如
- 实体包名:
io.github.gcdd1993.entity
- 实体标识符:
entity
- 模块标识符:
entity.repo
则生成的repository
代码包名为 –> io.github.gcdd1993.entity.repo