peacetrue-modelgenerator-template

模块生成器

License

License

GroupId

GroupId

com.github.peacetrue.modelgenerator
ArtifactId

ArtifactId

peacetrue-modelgenerator-template
Last Version

Last Version

1.0-RELEASE
Release Date

Release Date

Type

Type

jar
Description

Description

peacetrue-modelgenerator-template
模块生成器
Project URL

Project URL

https://github.com/peacetrue/model-generator
Source Code Management

Source Code Management

https://github.com/peacetrue/model-generator

Download peacetrue-modelgenerator-template

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.peacetrue.modelgenerator/peacetrue-modelgenerator-template/ -->
<dependency>
    <groupId>com.github.peacetrue.modelgenerator</groupId>
    <artifactId>peacetrue-modelgenerator-template</artifactId>
    <version>1.0-RELEASE</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.peacetrue.modelgenerator/peacetrue-modelgenerator-template/
implementation 'com.github.peacetrue.modelgenerator:peacetrue-modelgenerator-template:1.0-RELEASE'
// https://jarcasting.com/artifacts/com.github.peacetrue.modelgenerator/peacetrue-modelgenerator-template/
implementation ("com.github.peacetrue.modelgenerator:peacetrue-modelgenerator-template:1.0-RELEASE")
'com.github.peacetrue.modelgenerator:peacetrue-modelgenerator-template:jar:1.0-RELEASE'
<dependency org="com.github.peacetrue.modelgenerator" name="peacetrue-modelgenerator-template" rev="1.0-RELEASE">
  <artifact name="peacetrue-modelgenerator-template" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.peacetrue.modelgenerator', module='peacetrue-modelgenerator-template', version='1.0-RELEASE')
)
libraryDependencies += "com.github.peacetrue.modelgenerator" % "peacetrue-modelgenerator-template" % "1.0-RELEASE"
[com.github.peacetrue.modelgenerator/peacetrue-modelgenerator-template "1.0-RELEASE"]

Dependencies

runtime (7)

Group / Artifact Type Version
org.apache.velocity : velocity-engine-core jar 2.1
org.springframework : spring-context-support jar 5.0.6.RELEASE
org.springframework.boot : spring-boot-autoconfigure jar 2.0.6.RELEASE
org.springframework.boot : spring-boot-configuration-processor jar 2.0.6.RELEASE
org.springframework : spring-expression jar 5.0.6.RELEASE
ch.qos.logback : logback-classic jar 1.2.3
com.github.peacetrue.modelgenerator : peacetrue-modelgenerator jar 1.0-RELEASE

Project Modules

There are no modules declared in this project.

模型生成器

基于模型信息生成相关文件以实现特定功能。

1. 黄金管家模板分析

1.1. 黄金管家项目结构

aum project structure

关于项目名称,需要区分逻辑项目名称和目录项目名称:

  • 逻辑项目名称:开发者给项目的命名,例如:demo、ai等

  • 目录项目名称:在创建项目源码时给项目目录的命名,一般会加上公司名前缀,例如:aum-demo、aum-ai等

以上项目名称指目录项目名称, 以下用项目名称(或项目名)表示逻辑项目名称, 目录项目名称(或目录项目名)表示目录项目名称。

关于模块,需要区分项目模块和模型模块:

  • 项目模块:指项目的下级模块,是目录结构上的划分

  • 模型模块:指模型对应到功能实现上的模块

以下用项目模块表示项目模块,模块表示模型模块。

1.2. 黄金管家模块结构

aum module structure

以上为按模块进行拆分的结构,很多开发者也会使用按层级拆分的结构。

1.3. 黄金管家模板源码结构

template aum

主要包括三部分:

  1. 模板:即vm文件,用于生成文件

  2. 模板配置,即properties文件,用于配置模板及其生成文件的存储路径

  3. AutoConfiguration配置,即java文件和spring.factories,用于自动加载配置到系统中

具体模板配置
link:peacetrue-modelgenerator-template-aum/src/main/resources/peacetrue.modelgenerator.template.aum.properties[]

开发者需要编写模板文件, 模板文件内容和数量都没有限制,根据实际需要决定。 如何编写模板,请查看[_模板编写指导]。 模板文件编写完后,需要进行配置, 如何配置模板,请查看[_模板配置指导]

2. 模板编写指导

模板引擎使用 velocity,开发者需要了解其语法。

2.1. 模型信息

在编写模板时,需要使用到模型信息。

model

以上模型信息的属性,都可以在模板中使用。

2.2. 内置扩展属性

考虑到主键属性比较特殊, 单独将其作为idProperty暴露到模板中, 它是一个模型属性对象。

在生成java文件时需要使用到包名, 也将其作为packageName暴露到模板中。

2.3. 自定义扩展属性

实现接口TemplatePropertiesSupplier提供需要暴露自定义属性。

3. 模板配置指导

配置属性以前缀peacetrue.model-generator作为起始, 以下描述以.开头,均表示省略前缀。

 .templates[0].path

指定模板路径,以classpath:作为前缀,从类路径读取;以file:作为前缀,从文件路径读取。

 .templates[0].package-name

如果是生成java文件,则需要指定包名;html文件不需要。 例如:com.aum.demo.modules.test。 如果需要根据模型信息动态变化,可以使用SPEL表达式,支持读取模型属性, 例如:com.aum.demo.modules.#{lowerName}

 .templates[0].output-path

指定生成文件的存储路径, 例如:.templates[0].output-path=/Users/xiayx/Documents/Projects/aum-demo/aum-demo-service-api/src/main/java/com/aum/demo/modules/test/Test.java。 路径太长,可以使用.projectPath=/Users/xiayx/Documents/Projects/aum-demo指定项目路径, 则.templates[0].output-path=/aum-demo-service-api/src/main/java/com/aum/demo/modules/test/Test.java; 如果需要动态变化,可使用属性占位符和SPEL表达式,例如: .templates[0].output-path=/${.module-prefix}-service-api/src/main/java/${.package-prefix-path}/#{lowerName}/#{name}.java.module-prefix用于指定项目模块名称前缀, .package-prefix-path用于指定包前缀路径。

以上路径还可以按照标准结构进行细化:

link:peacetrue-modelgenerator-template/src/main/resources/peacetrue.modelgenerator.template.properties[]
 .templates

指定多个具体的模板信息

 .template

指定具体模板的缺省配置,templates下为空的属性会使用template对应的属性

4. 数据源模型指导

4.1. 表名转模型名

默认将下划线分隔式转换成大写驼峰式,例如:order_task → OrderTask。 如需自定义请实现TableNameToModelName

4.2. 列名转属性名

默认将下划线分隔式转换成小写驼峰式,例如:order_task → orderTask。 如需自定义请实现ColumnNameToPropertyName

4.3. Sql类型转Java类型

默认实现参考 mapping_sql_and_java_data_types, 如需自定义请实现SqlTypeToJavaType

5. 技术实现分析

基于spring-boot2实现。

5.1. 模块关系结构

generator model structure

开发者可根据需要选择依赖的类库, 如果只使用核心生成功能,则依赖peacetrue-modelgenerator, 需要自行实现模板供应者TemplateSupplier和模型信息供应者ModelSupplier。 也可以基于peacetrue-modelgenerator-template提供模板实现; 或者使用数据库模型信息供应者peacetrue-modelgenerator-model-datasource

5.2. maven依赖配置

peacetrue-modelgenerator
<dependency>
  <groupId>com.github.peacetrue.modelgenerator</groupId>
  <artifactId>peacetrue-modelgenerator</artifactId>
  <version>1.0-RELEASE</version>
</dependency>
peacetrue-modelgenerator-template
<dependency>
  <groupId>com.github.peacetrue.modelgenerator</groupId>
  <artifactId>peacetrue-modelgenerator-template</artifactId>
  <version>1.0-RELEASE</version>
</dependency>
peacetrue-modelgenerator-model-datasource
<dependency>
  <groupId>com.github.peacetrue.modelgenerator</groupId>
  <artifactId>peacetrue-modelgenerator-model-datasource</artifactId>
  <version>1.0-RELEASE</version>
</dependency>

Versions

Version
1.0-RELEASE