模型生成器
基于模型信息生成相关文件以实现特定功能。
1. 黄金管家模板分析
1.1. 黄金管家项目结构
关于项目名称,需要区分逻辑项目名称和目录项目名称:
-  逻辑项目名称:开发者给项目的命名,例如:demo、ai等 
-  目录项目名称:在创建项目源码时给项目目录的命名,一般会加上公司名前缀,例如:aum-demo、aum-ai等 
以上项目名称指目录项目名称, 以下用项目名称(或项目名)表示逻辑项目名称, 目录项目名称(或目录项目名)表示目录项目名称。
关于模块,需要区分项目模块和模型模块:
-  项目模块:指项目的下级模块,是目录结构上的划分 
-  模型模块:指模型对应到功能实现上的模块 
以下用项目模块表示项目模块,模块表示模型模块。
1.3. 黄金管家模板源码结构
主要包括三部分:
-  模板:即vm文件,用于生成文件 
-  模板配置,即properties文件,用于配置模板及其生成文件的存储路径 
-  AutoConfiguration配置,即java文件和spring.factories,用于自动加载配置到系统中 
link:peacetrue-modelgenerator-template-aum/src/main/resources/peacetrue.modelgenerator.template.aum.properties[] 
     2. 模板编写指导
模板引擎使用 velocity,开发者需要了解其语法。
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. 模块关系结构
开发者可根据需要选择依赖的类库, 如果只使用核心生成功能,则依赖peacetrue-modelgenerator, 需要自行实现模板供应者TemplateSupplier和模型信息供应者ModelSupplier。 也可以基于peacetrue-modelgenerator-template提供模板实现; 或者使用数据库模型信息供应者peacetrue-modelgenerator-model-datasource。
5.2. maven依赖配置
<dependency>
  <groupId>com.github.peacetrue.modelgenerator</groupId>
  <artifactId>peacetrue-modelgenerator</artifactId>
  <version>1.0-RELEASE</version>
</dependency><dependency>
  <groupId>com.github.peacetrue.modelgenerator</groupId>
  <artifactId>peacetrue-modelgenerator-template</artifactId>
  <version>1.0-RELEASE</version>
</dependency><dependency>
  <groupId>com.github.peacetrue.modelgenerator</groupId>
  <artifactId>peacetrue-modelgenerator-model-datasource</artifactId>
  <version>1.0-RELEASE</version>
</dependency> JarCasting
 JarCasting



