SpringJpaCRUD代码⽣成器
利⽤业余时间撸了⼀个Spring Jpa代码⽣成器。
简介
这是⼀款基于Freemarker模板驱动的代码⽣成器。
依据现有的实体类代码,⾃动⽣成CRUD代码,解放双⼿,加快开发速度。
⽣成的代码包括但不仅限于(可以⾃定义⽣成模块)
Form表单代码
Repository代码
Service代码
Controller代码
SpringBoot使⽤⽰例
克隆,体会解放双⼿的美妙感受!
如何使⽤
导⼊仓库
Copy
maven { url 'dl.bintray/gcdd1993/maven' } dependencies { // jpa code generator testCompile 'dd1993:jpa-codegen:v1.0.1' testCompile 'org.freemarker:freemarker:2.3.28' }
配置代码⽣成器
配置⽂件
Copy
免费模板生成器## 作者 author=gcdd1993 ## 代码注释 comments=code generated by jpa-codegen ## 是否覆盖原⽂件,除⾮特殊情况,不然请不要覆盖cover=false ## 代码模板⽬录 template.dir=src/test/resources/template/ ## 实体类包名 Deprecated从v1.0.1开始从配置⽂件中移除 -e
ntity.package=com.ity ## 实体类标识符 Deprecated从v1.0.1开始从配置⽂件中移除 - entity.flag=entity ## 以下配置是模块配置(格式模块名.配置名),必须在模板⽬录下提供与模块名相同的模板 ## ⽣成的代码后缀 repository.suffix=Repository ## 模板名称plate=repository.ftl ## 模块标识符 repository.po service.suffix=plate=service.ftl
service.flag=service form.suffix=plate=form.ftl form.flag=form controller.suffix=plate=controller.ftl controller.flag=web
其中
Copy
repository.suffix=plate=repository.ftl repository.po
是模块配置,
编写代码模板
模板主要基于Freemarker,如Spring Boot2.x代码模板可以像下⾯这样
Copy
package ${packageName}; import ${entity.packageName}.${entity.className}; import
org.springframework.pository.JpaRepository; import org.springframework.data.querydsl.QuerydslPredicateExecutor; <#list imports as import> import ${import}; </#list> /** * repository for ${entity.className} generated by jpa-codegen * ${comments} * * @author ${author} * Created On ${date}. */ public interface ${className} extends JpaRepository<${entity.className}, ${entity.id.className}>, QuerydslPredicateExecutor<${entity.className}> { }
编写⽣成器⼊⼝
在test模块中编写⽣成器⼊⼝,如
Copy
public class Codegen { @Test public void generate() { new CodeGenerator("src/test/resources/codegen.properties")
.registerRender("repository") .generate(); } }
然后运⾏generate(),在项⽬⽬录下将会⽣成
⽣成的代码完全由模板以及实体类信息决定。
如何编写模板?
模板完全基于FreeMarker以及实体类信息,FreeMarker参考
⽀持的元素定义如下
基本信息
Freemarker元素解释⽰例输出
${ftlName}模板名称controller.ftl
${ftlPath}模板⽬录src/main/resources/template/
${savePath}保存路径src/main/resources/io/github/gcdd1993/controller
${packageName}java⽂件包名ller
${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}实体类名,SimpleName()User
${entity.packageName}实体包名,Package().getName()dd1993 ${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写下⼀⾏
Copy
custom.additionalment=this is additional comment
在模板中可以使⽤${otherParams.additional_comment}获取到该配置。
要注意的是:⾃定义配置使⽤custom开头,后⾯的配置会将.替换为_作为FreeMarker模板的key,例如上述的additionalment使
⽤${otherParams.additional_comment}获取。
什么是模块?
由于代码千变万化,为了尽可能的做到通⽤性,将每⼀种类型的代码抽象为模块,每⼀个模块将使⽤各⾃的模板,依照实体信息⽣成代码。需要为模板配置⼀下信息:
repository.suffix=Repository
模块类名后缀,⽣成的类名规则由实体类名+后缀构成
模块使⽤的Freemarker模板
repository.po
模块标识符,⽣成的代码包名由实体类将实体标识符替换为模块标识符来确认。
实体包名:ity
实体标识符:entity
模块标识符:po
则⽣成的repository代码包名为 --> po

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。