From 6f3f81480f487a02137221375d1c31179e4021a7 Mon Sep 17 00:00:00 2001 From: DB <2502523450@qq.com> Date: Mon, 9 Oct 2023 15:36:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cpop-Core/pom.xml | 5 + Cpop-Generator/pom.xml | 29 ++++ .../com/cpop/generator/CpopGenerator.java | 158 +++++++++++++++++ .../cpop/generator/template/BoGenerator.java | 60 +++++++ .../cpop/generator/template/DtoGenerator.java | 60 +++++++ .../generator/template/PageBoGenerator.java | 60 +++++++ .../generator/template/PageVoGenerator.java | 61 +++++++ .../cpop/generator/template/VoGenerator.java | 61 +++++++ .../src/main/resources/template.enjoy/bo.tpl | 103 +++++++++++ .../resources/template.enjoy/controller.tpl | 163 ++++++++++++++++++ .../src/main/resources/template.enjoy/dto.tpl | 91 ++++++++++ .../main/resources/template.enjoy/entity.tpl | 95 ++++++++++ .../main/resources/template.enjoy/mapper.tpl | 20 +++ .../resources/template.enjoy/mapperXml.tpl | 7 + .../resources/template.enjoy/package-info.tpl | 7 + .../main/resources/template.enjoy/pageBo.tpl | 103 +++++++++++ .../main/resources/template.enjoy/pageVo.tpl | 103 +++++++++++ .../main/resources/template.enjoy/service.tpl | 14 ++ .../resources/template.enjoy/serviceImpl.tpl | 124 +++++++++++++ .../resources/template.enjoy/tableDef.tpl | 40 +++++ .../src/main/resources/template.enjoy/vo.tpl | 103 +++++++++++ pom.xml | 13 ++ 22 files changed, 1480 insertions(+) create mode 100644 Cpop-Generator/pom.xml create mode 100644 Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java create mode 100644 Cpop-Generator/src/main/java/com/cpop/generator/template/BoGenerator.java create mode 100644 Cpop-Generator/src/main/java/com/cpop/generator/template/DtoGenerator.java create mode 100644 Cpop-Generator/src/main/java/com/cpop/generator/template/PageBoGenerator.java create mode 100644 Cpop-Generator/src/main/java/com/cpop/generator/template/PageVoGenerator.java create mode 100644 Cpop-Generator/src/main/java/com/cpop/generator/template/VoGenerator.java create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/bo.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/controller.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/dto.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/entity.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/mapper.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/mapperXml.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/package-info.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/pageBo.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/pageVo.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/service.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/serviceImpl.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/tableDef.tpl create mode 100644 Cpop-Generator/src/main/resources/template.enjoy/vo.tpl diff --git a/Cpop-Core/pom.xml b/Cpop-Core/pom.xml index 508ff43..9bebf2b 100644 --- a/Cpop-Core/pom.xml +++ b/Cpop-Core/pom.xml @@ -67,6 +67,11 @@ org.apache.commons commons-compress + + + com.zaxxer + HikariCP + diff --git a/Cpop-Generator/pom.xml b/Cpop-Generator/pom.xml new file mode 100644 index 0000000..35176d2 --- /dev/null +++ b/Cpop-Generator/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + com.cpop + Cpop-Union + 1.0.0 + ../pom.xml + + Cpop-Generator + Cpop-Generator + 代码生成模块 + jar + + + + + com.mybatis-flex + mybatis-flex-codegen + + + + com.cpop + Cpop-Core + + + + diff --git a/Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java b/Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java new file mode 100644 index 0000000..391d9d7 --- /dev/null +++ b/Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java @@ -0,0 +1,158 @@ +package com.cpop.generator; + +import com.cpop.common.utils.DateUtils; +import com.cpop.common.utils.StringUtils; +import com.cpop.core.base.entity.BaseEntity; +import com.cpop.core.base.entity.BaseInsertListener; +import com.cpop.core.base.entity.BaseUpdateListener; +import com.mybatisflex.codegen.Generator; +import com.mybatisflex.codegen.config.EntityConfig; +import com.mybatisflex.codegen.config.GlobalConfig; +import com.mybatisflex.codegen.config.TableConfig; +import com.mybatisflex.core.exception.MybatisFlexException; +import com.zaxxer.hikari.HikariDataSource; + +import java.util.Arrays; +import java.util.Scanner; + +/** + * @author: DB + * @Date: 2023/08/04/13:48 + * @Description: 代码生成 + */ +public class CpopGenerator { + + /** + * 数据库 URL + */ + private static final String URL = "jdbc:mysql://localhost:3306/cpop-union?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; + + /** + * 数据库用户名 + */ + private static final String USERNAME = "root"; + /** + * 数据库密码 + */ + private static final String PASSWORD = "root"; + + /** + * 输出路径 + */ + private static final String EXPORT_URL = "/Cpop-Jambox"; + + /** + * 模块 + */ + private static final String EXPORT_ITEM = "jambox"; + + /** + * 表前缀 + */ + private static final String TABLE_PREFIX = "cp_j_"; + + /** + * 主入口 + * @param args + */ + public static void main(String[] args) { + //配置数据源 + try (HikariDataSource dataSource = new HikariDataSource()) { + dataSource.setJdbcUrl(URL); + dataSource.setUsername(USERNAME); + dataSource.setPassword(PASSWORD); + //创建配置内容,两种风格都可以。 + GlobalConfig globalConfig = createGlobalConfig(); + //GlobalConfig globalConfig = createGlobalConfigUseStyle2(); + //通过 datasource 和 globalConfig 创建代码生成器 + Generator generator = new Generator(dataSource, globalConfig); + /*GeneratorFactory.registerGenerator("bo", new BoGenerator()); + GeneratorFactory.registerGenerator("vo", new VoGenerator()); + GeneratorFactory.registerGenerator("pageBo", new PageBoGenerator()); + GeneratorFactory.registerGenerator("pageVo", new PageVoGenerator()); + GeneratorFactory.registerGenerator("dto", new DtoGenerator());*/ + //生成代码 + generator.generate(); + } + } + + /** + * 命令行输入表名 + * @return + */ + private static String scanner() { + Scanner scanner = new Scanner(System.in); + System.out.println("请输入表名,多个英文逗号分割:"); + if (scanner.hasNext()) { + String ipt = scanner.next(); + if (StringUtils.isNotBlank(ipt)) { + return ipt; + } + } + throw new MybatisFlexException("请输入正确的表名,多个英文逗号分割!"); + } + + /** + * @Description: 构建代码生成配置 + * @param + * @return GlobalConfig + * @author DB + * @Date: 2023/8/4 0004 14:05 + */ + private static GlobalConfig createGlobalConfig(){ + String[] tables = scanner().split(","); + //创建配置内容 + GlobalConfig globalConfig = new GlobalConfig(); + + //设置注释配置 + globalConfig.getJavadocConfig() + .setAuthor("DB") + .setSince(DateUtils.getDate()); + //设置包配置 + globalConfig.getPackageConfig() + .setSourceDir(System.getProperty("user.dir") + EXPORT_URL + "/src/main/java") + .setBasePackage("com.cpop." + EXPORT_ITEM + ".business") + .setMapperXmlPath(System.getProperty("user.dir") + EXPORT_URL + "/src/main/resources/mapper"); + //设置策略配置 + globalConfig.getStrategyConfig() + .setTablePrefix(TABLE_PREFIX) + .setLogicDeleteColumn("is_delete") + .setGenerateTable(tables); + //设置模板配置 + globalConfig.getTemplateConfig() + .setEntity(System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/entity.tpl") + .setMapper(System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/mapper.tpl") + .setService(System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/service.tpl") + .setServiceImpl(System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/serviceImpl.tpl") + .setController(System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/controller.tpl") + .setMapperXml(System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/mapperXml.tpl"); + //Entity 生成配置 + globalConfig.getEntityConfig() + .setSuperClass(BaseEntity.class) + .setWithLombok(true) + .setWithSwagger(true) + .setSwaggerVersion(EntityConfig.SwaggerVersion.FOX); + // 开启 Entity 的生成 + globalConfig.enableEntity(); + // 开启 Mapper 的生成 + globalConfig.enableMapper(); + // 开启 Service 的生成 + globalConfig.enableService(); + // 开启 ServiceImpl 的生成 + globalConfig.enableServiceImpl(); + // 开启 Controller 的生成 + globalConfig.enableController(); + // 开启 xml 的生成 + globalConfig.enableMapperXml(); + //遍历设置表配置 + Arrays.asList(tables).forEach(item -> { + TableConfig tableConfig = new TableConfig(); + tableConfig.setInsertListenerClass(BaseInsertListener.class); + tableConfig.setUpdateListenerClass(BaseUpdateListener.class); + tableConfig.setTableName(item); + tableConfig.setMapperGenerateEnable(false); + globalConfig.setTableConfig(tableConfig); + }); + return globalConfig; + } +} diff --git a/Cpop-Generator/src/main/java/com/cpop/generator/template/BoGenerator.java b/Cpop-Generator/src/main/java/com/cpop/generator/template/BoGenerator.java new file mode 100644 index 0000000..66a9f1b --- /dev/null +++ b/Cpop-Generator/src/main/java/com/cpop/generator/template/BoGenerator.java @@ -0,0 +1,60 @@ +package com.cpop.generator.template; + +import com.mybatisflex.codegen.config.EntityConfig; +import com.mybatisflex.codegen.config.GlobalConfig; +import com.mybatisflex.codegen.config.PackageConfig; +import com.mybatisflex.codegen.entity.Table; +import com.mybatisflex.codegen.generator.IGenerator; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * @author: DB + * @Date: 2023/08/04/17:07 + * @Description: + */ +public class BoGenerator implements IGenerator { + + private String templatePath = System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/bo.tpl"; + + @Override + public String getTemplatePath() { + return templatePath; + } + + @Override + public void setTemplatePath(String templatePath) { + this.templatePath = templatePath; + } + + @Override + public void generate(Table table, GlobalConfig globalConfig) { + + if (!globalConfig.isEntityGenerateEnable()) { + return; + } + + PackageConfig packageConfig = globalConfig.getPackageConfig(); + EntityConfig entityConfig = globalConfig.getEntityConfig(); + //获取路径 + String boPackagePath = packageConfig.getBasePackage().replace(".", "/") + "/bo"; + File boJavaFile = new File(packageConfig.getSourceDir(), boPackagePath + "/" + + table.buildEntityClassName() + "Bo.java"); + + if (boJavaFile.exists() && !entityConfig.isOverwriteEnable()) { + return; + } + + Map params = new HashMap<>(4); + params.put("table", table); + params.put("entityConfig", entityConfig); + params.put("packageConfig", packageConfig); + params.put("javadocConfig", globalConfig.getJavadocConfig()); + + globalConfig.getTemplateConfig().getTemplate().generate(params, templatePath, boJavaFile); + + System.out.println("Bo ---> " + boJavaFile); + } +} diff --git a/Cpop-Generator/src/main/java/com/cpop/generator/template/DtoGenerator.java b/Cpop-Generator/src/main/java/com/cpop/generator/template/DtoGenerator.java new file mode 100644 index 0000000..bb62889 --- /dev/null +++ b/Cpop-Generator/src/main/java/com/cpop/generator/template/DtoGenerator.java @@ -0,0 +1,60 @@ +package com.cpop.generator.template; + +import com.mybatisflex.codegen.config.EntityConfig; +import com.mybatisflex.codegen.config.GlobalConfig; +import com.mybatisflex.codegen.config.PackageConfig; +import com.mybatisflex.codegen.entity.Table; +import com.mybatisflex.codegen.generator.IGenerator; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * @author: DB + * @Date: 2023/08/04/17:07 + * @Description: + */ +public class DtoGenerator implements IGenerator { + + private String templatePath = System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/dto.tpl"; + + @Override + public String getTemplatePath() { + return templatePath; + } + + @Override + public void setTemplatePath(String templatePath) { + this.templatePath = templatePath; + } + + @Override + public void generate(Table table, GlobalConfig globalConfig) { + + if (!globalConfig.isEntityGenerateEnable()) { + return; + } + + PackageConfig packageConfig = globalConfig.getPackageConfig(); + EntityConfig entityConfig = globalConfig.getEntityConfig(); + + //获取路径 + String dtoPackagePath = packageConfig.getBasePackage().replace(".", "/") + "/dto"; + File dtoJavaFile = new File(packageConfig.getSourceDir(), dtoPackagePath + "/" + + table.buildEntityClassName() + "Dto.java"); + + if (dtoJavaFile.exists() && !entityConfig.isOverwriteEnable()) { + return; + } + + Map params = new HashMap<>(4); + params.put("table", table); + params.put("entityConfig", entityConfig); + params.put("packageConfig", packageConfig); + params.put("javadocConfig", globalConfig.getJavadocConfig()); + + globalConfig.getTemplateConfig().getTemplate().generate(params, templatePath, dtoJavaFile); + System.out.println("Dto ---> " + dtoJavaFile); + } +} diff --git a/Cpop-Generator/src/main/java/com/cpop/generator/template/PageBoGenerator.java b/Cpop-Generator/src/main/java/com/cpop/generator/template/PageBoGenerator.java new file mode 100644 index 0000000..e6acf18 --- /dev/null +++ b/Cpop-Generator/src/main/java/com/cpop/generator/template/PageBoGenerator.java @@ -0,0 +1,60 @@ +package com.cpop.generator.template; + +import com.mybatisflex.codegen.config.EntityConfig; +import com.mybatisflex.codegen.config.GlobalConfig; +import com.mybatisflex.codegen.config.PackageConfig; +import com.mybatisflex.codegen.entity.Table; +import com.mybatisflex.codegen.generator.IGenerator; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * @author: DB + * @Date: 2023/08/04/17:07 + * @Description: + */ +public class PageBoGenerator implements IGenerator { + + private String templatePath = System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/pageBo.tpl"; + + @Override + public String getTemplatePath() { + return templatePath; + } + + @Override + public void setTemplatePath(String templatePath) { + this.templatePath = templatePath; + } + + @Override + public void generate(Table table, GlobalConfig globalConfig) { + + if (!globalConfig.isEntityGenerateEnable()) { + return; + } + + PackageConfig packageConfig = globalConfig.getPackageConfig(); + EntityConfig entityConfig = globalConfig.getEntityConfig(); + + //获取路径 + String pageBoPackagePath = packageConfig.getBasePackage().replace(".", "/") + "/bo"; + File pageBoJavaFile = new File(packageConfig.getSourceDir(), pageBoPackagePath + "/" + + table.buildEntityClassName() + "PageBo.java"); + + if (pageBoJavaFile.exists() && !entityConfig.isOverwriteEnable()) { + return; + } + + Map params = new HashMap<>(4); + params.put("table", table); + params.put("entityConfig", entityConfig); + params.put("packageConfig", packageConfig); + params.put("javadocConfig", globalConfig.getJavadocConfig()); + + globalConfig.getTemplateConfig().getTemplate().generate(params, templatePath, pageBoJavaFile); + System.out.println("PageBo ---> " + pageBoJavaFile); + } +} diff --git a/Cpop-Generator/src/main/java/com/cpop/generator/template/PageVoGenerator.java b/Cpop-Generator/src/main/java/com/cpop/generator/template/PageVoGenerator.java new file mode 100644 index 0000000..ad8b489 --- /dev/null +++ b/Cpop-Generator/src/main/java/com/cpop/generator/template/PageVoGenerator.java @@ -0,0 +1,61 @@ +package com.cpop.generator.template; + +import com.mybatisflex.codegen.config.EntityConfig; +import com.mybatisflex.codegen.config.GlobalConfig; +import com.mybatisflex.codegen.config.PackageConfig; +import com.mybatisflex.codegen.entity.Table; +import com.mybatisflex.codegen.generator.IGenerator; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * @author: DB + * @Date: 2023/08/04/17:07 + * @Description: + */ +public class PageVoGenerator implements IGenerator { + + private String templatePath = System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/pageVo.tpl"; + + @Override + public String getTemplatePath() { + return templatePath; + } + + @Override + public void setTemplatePath(String templatePath) { + this.templatePath = templatePath; + } + + @Override + public void generate(Table table, GlobalConfig globalConfig) { + + if (!globalConfig.isEntityGenerateEnable()) { + return; + } + + PackageConfig packageConfig = globalConfig.getPackageConfig(); + EntityConfig entityConfig = globalConfig.getEntityConfig(); + + //获取路径 + String pageVoPackagePath = packageConfig.getBasePackage().replace(".", "/") + "/vo"; + File pageVoJavaFile = new File(packageConfig.getSourceDir(), pageVoPackagePath + "/" + + table.buildEntityClassName() + "PageVo.java"); + + if (pageVoJavaFile.exists() && !entityConfig.isOverwriteEnable()) { + return; + } + + + Map params = new HashMap<>(4); + params.put("table", table); + params.put("entityConfig", entityConfig); + params.put("packageConfig", packageConfig); + params.put("javadocConfig", globalConfig.getJavadocConfig()); + + globalConfig.getTemplateConfig().getTemplate().generate(params, templatePath, pageVoJavaFile); + System.out.println("PageBo ---> " + pageVoJavaFile); + } +} diff --git a/Cpop-Generator/src/main/java/com/cpop/generator/template/VoGenerator.java b/Cpop-Generator/src/main/java/com/cpop/generator/template/VoGenerator.java new file mode 100644 index 0000000..68ca95d --- /dev/null +++ b/Cpop-Generator/src/main/java/com/cpop/generator/template/VoGenerator.java @@ -0,0 +1,61 @@ +package com.cpop.generator.template; + +import com.mybatisflex.codegen.config.EntityConfig; +import com.mybatisflex.codegen.config.GlobalConfig; +import com.mybatisflex.codegen.config.PackageConfig; +import com.mybatisflex.codegen.entity.Table; +import com.mybatisflex.codegen.generator.IGenerator; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * @author: DB + * @Date: 2023/08/04/17:07 + * @Description: + */ +public class VoGenerator implements IGenerator { + + private String templatePath = System.getProperty("user.dir") + "/Cpop-Generator/src/main/resources/template/enjoy/vo.tpl"; + + @Override + public String getTemplatePath() { + return templatePath; + } + + @Override + public void setTemplatePath(String templatePath) { + this.templatePath = templatePath; + } + + @Override + public void generate(Table table, GlobalConfig globalConfig) { + + if (!globalConfig.isEntityGenerateEnable()) { + return; + } + + PackageConfig packageConfig = globalConfig.getPackageConfig(); + EntityConfig entityConfig = globalConfig.getEntityConfig(); + + //获取路径 + String voPackagePath = packageConfig.getBasePackage().replace(".", "/") + "/vo"; + File voJavaFile = new File(packageConfig.getSourceDir(), voPackagePath + "/" + + table.buildEntityClassName() + "Vo.java"); + + if (voJavaFile.exists() && !entityConfig.isOverwriteEnable()) { + return; + } + + + Map params = new HashMap<>(4); + params.put("table", table); + params.put("entityConfig", entityConfig); + params.put("packageConfig", packageConfig); + params.put("javadocConfig", globalConfig.getJavadocConfig()); + + globalConfig.getTemplateConfig().getTemplate().generate(params, templatePath, voJavaFile); + System.out.println("Vo ---> " + voJavaFile); + } +} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/bo.tpl b/Cpop-Generator/src/main/resources/template.enjoy/bo.tpl new file mode 100644 index 0000000..1b0bb68 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/bo.tpl @@ -0,0 +1,103 @@ +#set(withLombok = entityConfig.isWithLombok()) +#set(withSwagger = entityConfig.isWithSwagger()) +#set(swaggerVersion = entityConfig.getSwaggerVersion()) +#set(withActiveRecord = entityConfig.isWithActiveRecord()) +#set(entityClassName = table.buildEntityClassName()) +package #(packageConfig.basePackage).bo; + +#for(importClass : table.buildImports()) +import #(importClass); +#end +#if(withActiveRecord) +import com.mybatisflex.core.activerecord.Model; +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +import io.swagger.v3.oas.annotations.media.Schema; +#end +#if(withLombok) +#if(withActiveRecord) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +#else +import lombok.*; +import lombok.experimental.Accessors; +#end +#end + +/** + * #(table.getComment()) 实体类。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(withLombok) +#if(withActiveRecord) +@Accessors(chain = true) +@Data(staticConstructor = "create") +@EqualsAndHashCode(callSuper = true) +#else +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +#end +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +@ApiModel("#(table.getComment())") +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +@Schema(description = "#(table.getComment())") +#end +public class #(entityClassName)Bo#if(withActiveRecord) extends Model<#(entityClassName)>#else#(table.buildImplements())#end { + +#for(column : table.columns) + #set(comment = javadocConfig.formatColumnComment(column.comment)) + #if(isNotBlank(comment)) + /** + * #(comment) + */ + #end + #if(isNotBlank(annotations)) + #(annotations) + #end + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiModelProperty("#(column.comment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Schema(description = "#(column.comment)") + #end + private #(column.propertySimpleType) #(column.property)#if(isNotBlank(column.propertyDefaultValue)) = #(column.propertyDefaultValue)#end; + +#end +#if(!withLombok) + #if(withActiveRecord) + public static #(entityClassName) create() { + return new #(entityClassName)(); + } + + #end + #for(column: table.columns) + public #(column.propertySimpleType) #(column.getterMethod())() { + return #(column.property); + } + + #if(withActiveRecord) + public #(entityClassName) #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + return this; + } + #else + public void #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + } + #end + + #end +#end} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/controller.tpl b/Cpop-Generator/src/main/resources/template.enjoy/controller.tpl new file mode 100644 index 0000000..1d72aa7 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/controller.tpl @@ -0,0 +1,163 @@ +#set(tableComment = table.getComment()) +#set(entityClassName = table.buildEntityClassName()) +#set(entityVarName = firstCharToLowerCase(entityClassName)) +#set(serviceVarName = firstCharToLowerCase(table.buildServiceClassName())) +package #(packageConfig.controllerPackage); + +import com.mybatisflex.core.paginate.Page; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.beans.factory.annotation.Autowired; +import #(packageConfig.entityPackage).#(entityClassName); +import #(packageConfig.servicePackage).#(table.buildServiceClassName()); +#if(controllerConfig.restStyle) +import org.springframework.web.bind.annotation.RestController; +#else +import org.springframework.stereotype.Controller; +#end +#if(controllerConfig.superClass != null) +import #(controllerConfig.buildSuperClassImport()); +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +#end +import java.io.Serializable; +import java.util.List; + +/** + * #(tableComment) 控制层。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(controllerConfig.restStyle) +@RestController +#else +@Controller +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +@Api(tags = "#(tableComment)接口") +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +@Tag(name = "#(tableComment)接口") +#end +@RequestMapping("/#(firstCharToLowerCase(entityClassName))") +public class #(table.buildControllerClassName()) #if(controllerConfig.superClass)extends #(controllerConfig.buildSuperClassName()) #end { + + @Autowired + private #(table.buildServiceClassName()) #(serviceVarName); + + /** + * 添加#(tableComment)。 + * + * @param #(entityVarName) #(tableComment) + * @return {@code true} 添加成功,{@code false} 添加失败 + */ + @PostMapping("save") + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiOperation("保存#(tableComment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Operation(summary="保存#(tableComment)") + #end + public boolean save(@RequestBody #if(withSwagger && swaggerVersion.getName() == "FOX")@ApiParam("#(tableComment)") #end #if(withSwagger && swaggerVersion.getName() == "DOC")@Parameter(description="#(tableComment)")#end #(entityClassName) #(entityVarName)) { + return #(serviceVarName).save(#(entityVarName)); + } + + /** + * 根据主键删除#(tableComment)。 + * + * @param id 主键 + * @return {@code true} 删除成功,{@code false} 删除失败 + */ + @DeleteMapping("remove/{id}") + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiOperation("根据主键#(tableComment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Operation(summary="根据主键#(tableComment)") + #end + public boolean remove(@PathVariable #if(withSwagger && swaggerVersion.getName() == "FOX")@ApiParam("#(tableComment)主键") #end #if(withSwagger && swaggerVersion.getName() == "DOC")@Parameter(description="#(tableComment)主键")#end Serializable id) { + return #(serviceVarName).removeById(id); + } + + /** + * 根据主键更新#(tableComment)。 + * + * @param #(entityVarName) #(tableComment) + * @return {@code true} 更新成功,{@code false} 更新失败 + */ + @PutMapping("update") + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiOperation("根据主键更新#(tableComment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Operation(summary="根据主键更新#(tableComment)") + #end + public boolean update(@RequestBody #if(withSwagger && swaggerVersion.getName() == "FOX")@ApiParam("#(tableComment)主键") #end #if(withSwagger && swaggerVersion.getName() == "DOC")@Parameter(description="#(tableComment)主键")#end#(entityClassName) #(entityVarName)) { + return #(serviceVarName).updateById(#(entityVarName)); + } + + /** + * 查询所有#(tableComment)。 + * + * @return 所有数据 + */ + @GetMapping("list") + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiOperation("查询所有#(tableComment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Operation(summary="查询所有#(tableComment)") + #end + public List<#(entityClassName)> list() { + return #(serviceVarName).list(); + } + + /** + * 根据#(tableComment)主键获取详细信息。 + * + * @param id #(tableComment)主键 + * @return #(tableComment)详情 + */ + @GetMapping("getInfo/{id}") + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiOperation("根据主键获取#(tableComment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Operation(summary="根据主键获取#(tableComment)") + #end + public #(entityClassName) getInfo(@PathVariable #if(withSwagger && swaggerVersion.getName() == "FOX")@ApiParam("#(tableComment)主键") #if(withSwagger && swaggerVersion.getName() == "DOC")@Parameter(description="#(tableComment)主键")#end#end Serializable id) { + return #(serviceVarName).getById(id); + } + + /** + * 分页查询#(tableComment)。 + * + * @param page 分页对象 + * @return 分页对象 + */ + @GetMapping("page") + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiOperation("分页查询#(tableComment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Operation(summary="分页查询#(tableComment)") + #end + public Page<#(entityClassName)> page(#if(withSwagger && swaggerVersion.getName() == "FOX")@ApiParam("分页信息") #end #if(withSwagger && swaggerVersion.getName() == "DOC")@Parameter(description="分页信息")#end Page<#(entityClassName)> page) { + return #(serviceVarName).page(page); + } + +} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/dto.tpl b/Cpop-Generator/src/main/resources/template.enjoy/dto.tpl new file mode 100644 index 0000000..2a74dbe --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/dto.tpl @@ -0,0 +1,91 @@ +#set(withLombok = entityConfig.isWithLombok()) +#set(withSwagger = entityConfig.isWithSwagger()) +#set(swaggerVersion = entityConfig.getSwaggerVersion()) +#set(withActiveRecord = entityConfig.isWithActiveRecord()) +#set(entityClassName = table.buildEntityClassName()) +package #(packageConfig.basePackage).dto; + +#for(importClass : table.buildImports()) +import #(importClass); +#end +#if(withActiveRecord) +import com.mybatisflex.core.activerecord.Model; +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +import io.swagger.v3.oas.annotations.media.Schema; +#end +#if(withLombok) +#if(withActiveRecord) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +#else +import lombok.*; +import lombok.experimental.Accessors; +#end +#end + +/** + * #(table.getComment()) 实体类。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(withLombok) +#if(withActiveRecord) +@Accessors(chain = true) +@Data(staticConstructor = "create") +@EqualsAndHashCode(callSuper = true) +#else +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +#end +#end +public class #(entityClassName)Dto#if(withActiveRecord) extends Model<#(entityClassName)>#else#(table.buildImplements())#end { + +#for(column : table.columns) + #set(comment = javadocConfig.formatColumnComment(column.comment)) + #if(isNotBlank(comment)) + /** + * #(comment) + */ + #end + #if(isNotBlank(annotations)) + #(annotations) + #end + private #(column.propertySimpleType) #(column.property)#if(isNotBlank(column.propertyDefaultValue)) = #(column.propertyDefaultValue)#end; + +#end +#if(!withLombok) + #if(withActiveRecord) + public static #(entityClassName) create() { + return new #(entityClassName)(); + } + + #end + #for(column: table.columns) + public #(column.propertySimpleType) #(column.getterMethod())() { + return #(column.property); + } + + #if(withActiveRecord) + public #(entityClassName) #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + return this; + } + #else + public void #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + } + #end + + #end +#end} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/entity.tpl b/Cpop-Generator/src/main/resources/template.enjoy/entity.tpl new file mode 100644 index 0000000..8a6c8f3 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/entity.tpl @@ -0,0 +1,95 @@ +#set(withLombok = entityConfig.isWithLombok()) +#set(withSwagger = entityConfig.isWithSwagger()) +#set(swaggerVersion = entityConfig.getSwaggerVersion()) +#set(withActiveRecord = entityConfig.isWithActiveRecord()) +#set(entityClassName = table.buildEntityClassName()) +package #(packageConfig.entityPackage); + +#for(importClass : table.buildImports()) +import #(importClass); +#end +#if(withActiveRecord) +import com.mybatisflex.core.activerecord.Model; +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +import io.swagger.v3.oas.annotations.media.Schema; +#end +#if(withLombok) +#if(withActiveRecord) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +#else +import lombok.*; +import lombok.experimental.Accessors; +#end +#end + +/** + * #(table.getComment()) 实体类。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(withLombok) +#if(withActiveRecord) +@Accessors(chain = true) +@Data(staticConstructor = "create") +@EqualsAndHashCode(callSuper = true) +#else +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +#end +#end +#(table.buildTableAnnotation()) +public class #(entityClassName)#if(withActiveRecord) extends Model<#(entityClassName)>#else#(table.buildExtends())#(table.buildImplements())#end { + +#for(column : table.columns) + #if(column.property != "createTime" && column.property != "createUserId" && column.property != "updateTime" && column.property != "updateUserId") + #set(comment = javadocConfig.formatColumnComment(column.comment)) + #if(isNotBlank(comment)) + /** + * #(comment) + */ + #end + #set(annotations = column.buildAnnotations()) + #if(isNotBlank(annotations)) + #(annotations) + #end + private #(column.propertySimpleType) #(column.property)#if(isNotBlank(column.propertyDefaultValue)) = #(column.propertyDefaultValue)#end; + #end + +#end +#if(!withLombok) + #if(withActiveRecord) + public static #(entityClassName) create() { + return new #(entityClassName)(); + } + + #end + #for(column: table.columns) + public #(column.propertySimpleType) #(column.getterMethod())() { + return #(column.property); + } + + #if(withActiveRecord) + public #(entityClassName) #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + return this; + } + #else + public void #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + } + #end + + #end +#end} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/mapper.tpl b/Cpop-Generator/src/main/resources/template.enjoy/mapper.tpl new file mode 100644 index 0000000..32670d1 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/mapper.tpl @@ -0,0 +1,20 @@ +package #(packageConfig.mapperPackage); + +#if(mapperConfig.isMapperAnnotation()) +import org.apache.ibatis.annotations.Mapper; +#end +import #(mapperConfig.buildSuperClassImport()); +import #(packageConfig.entityPackage).#(table.buildEntityClassName()); + +/** + * #(table.getComment()) 映射层。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(mapperConfig.isMapperAnnotation()) +@Mapper +#end +public interface #(table.buildMapperClassName()) extends #(mapperConfig.buildSuperClassName())<#(table.buildEntityClassName())> { + +} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/mapperXml.tpl b/Cpop-Generator/src/main/resources/template.enjoy/mapperXml.tpl new file mode 100644 index 0000000..bd16dde --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/mapperXml.tpl @@ -0,0 +1,7 @@ + + + + + diff --git a/Cpop-Generator/src/main/resources/template.enjoy/package-info.tpl b/Cpop-Generator/src/main/resources/template.enjoy/package-info.tpl new file mode 100644 index 0000000..a86e504 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/package-info.tpl @@ -0,0 +1,7 @@ +/** + * #(packageComment) + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ + package #(packageName); \ No newline at end of file diff --git a/Cpop-Generator/src/main/resources/template.enjoy/pageBo.tpl b/Cpop-Generator/src/main/resources/template.enjoy/pageBo.tpl new file mode 100644 index 0000000..572e618 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/pageBo.tpl @@ -0,0 +1,103 @@ +#set(withLombok = entityConfig.isWithLombok()) +#set(withSwagger = entityConfig.isWithSwagger()) +#set(swaggerVersion = entityConfig.getSwaggerVersion()) +#set(withActiveRecord = entityConfig.isWithActiveRecord()) +#set(entityClassName = table.buildEntityClassName()) +package #(packageConfig.basePackage).bo; + +#for(importClass : table.buildImports()) +import #(importClass); +#end +#if(withActiveRecord) +import com.mybatisflex.core.activerecord.Model; +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +import io.swagger.v3.oas.annotations.media.Schema; +#end +#if(withLombok) +#if(withActiveRecord) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +#else +import lombok.*; +import lombok.experimental.Accessors; +#end +#end + +/** + * #(table.getComment()) 实体类。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(withLombok) +#if(withActiveRecord) +@Accessors(chain = true) +@Data(staticConstructor = "create") +@EqualsAndHashCode(callSuper = true) +#else +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +#end +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +@ApiModel("#(table.getComment())") +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +@Schema(description = "#(table.getComment())") +#end +public class #(entityClassName)PageBo#if(withActiveRecord) extends Model<#(entityClassName)>#else#(table.buildImplements())#end { + +#for(column : table.columns) + #set(comment = javadocConfig.formatColumnComment(column.comment)) + #if(isNotBlank(comment)) + /** + * #(comment) + */ + #end + #if(isNotBlank(annotations)) + #(annotations) + #end + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiModelProperty("#(column.comment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Schema(description = "#(column.comment)") + #end + private #(column.propertySimpleType) #(column.property)#if(isNotBlank(column.propertyDefaultValue)) = #(column.propertyDefaultValue)#end; + +#end +#if(!withLombok) + #if(withActiveRecord) + public static #(entityClassName) create() { + return new #(entityClassName)(); + } + + #end + #for(column: table.columns) + public #(column.propertySimpleType) #(column.getterMethod())() { + return #(column.property); + } + + #if(withActiveRecord) + public #(entityClassName) #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + return this; + } + #else + public void #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + } + #end + + #end +#end} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/pageVo.tpl b/Cpop-Generator/src/main/resources/template.enjoy/pageVo.tpl new file mode 100644 index 0000000..5d16b7e --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/pageVo.tpl @@ -0,0 +1,103 @@ +#set(withLombok = entityConfig.isWithLombok()) +#set(withSwagger = entityConfig.isWithSwagger()) +#set(swaggerVersion = entityConfig.getSwaggerVersion()) +#set(withActiveRecord = entityConfig.isWithActiveRecord()) +#set(entityClassName = table.buildEntityClassName()) +package #(packageConfig.basePackage).vo; + +#for(importClass : table.buildImports()) +import #(importClass); +#end +#if(withActiveRecord) +import com.mybatisflex.core.activerecord.Model; +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +import io.swagger.v3.oas.annotations.media.Schema; +#end +#if(withLombok) +#if(withActiveRecord) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +#else +import lombok.*; +import lombok.experimental.Accessors; +#end +#end + +/** + * #(table.getComment()) 实体类。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(withLombok) +#if(withActiveRecord) +@Accessors(chain = true) +@Data(staticConstructor = "create") +@EqualsAndHashCode(callSuper = true) +#else +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +#end +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +@ApiModel("#(table.getComment())") +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +@Schema(description = "#(table.getComment())") +#end +public class #(entityClassName)PageVo#if(withActiveRecord) extends Model<#(entityClassName)>#else#(table.buildImplements())#end { + +#for(column : table.columns) + #set(comment = javadocConfig.formatColumnComment(column.comment)) + #if(isNotBlank(comment)) + /** + * #(comment) + */ + #end + #if(isNotBlank(annotations)) + #(annotations) + #end + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiModelProperty("#(column.comment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Schema(description = "#(column.comment)") + #end + private #(column.propertySimpleType) #(column.property)#if(isNotBlank(column.propertyDefaultValue)) = #(column.propertyDefaultValue)#end; + +#end +#if(!withLombok) + #if(withActiveRecord) + public static #(entityClassName) create() { + return new #(entityClassName)(); + } + + #end + #for(column: table.columns) + public #(column.propertySimpleType) #(column.getterMethod())() { + return #(column.property); + } + + #if(withActiveRecord) + public #(entityClassName) #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + return this; + } + #else + public void #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + } + #end + + #end +#end} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/service.tpl b/Cpop-Generator/src/main/resources/template.enjoy/service.tpl new file mode 100644 index 0000000..f130340 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/service.tpl @@ -0,0 +1,14 @@ +package #(packageConfig.servicePackage); + +import #(serviceConfig.buildSuperClassImport()); +import #(packageConfig.entityPackage).#(table.buildEntityClassName()); + +/** + * #(table.getComment()) 服务层。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +public interface #(table.buildServiceClassName()) extends #(serviceConfig.buildSuperClassName())<#(table.buildEntityClassName())> { + +} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/serviceImpl.tpl b/Cpop-Generator/src/main/resources/template.enjoy/serviceImpl.tpl new file mode 100644 index 0000000..22822a8 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/serviceImpl.tpl @@ -0,0 +1,124 @@ +#set(isCacheExample = serviceImplConfig.cacheExample) +#set(primaryKey = table.getPrimaryKey()) +#set(entityClassName = table.buildEntityClassName()) +package #(packageConfig.serviceImplPackage); + +import #(serviceImplConfig.buildSuperClassImport()); +import #(packageConfig.entityPackage).#(table.buildEntityClassName()); +import #(packageConfig.mapperPackage).#(table.buildMapperClassName()); +import #(packageConfig.servicePackage).#(table.buildServiceClassName()); +import org.springframework.stereotype.Service; +#if(isCacheExample) +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +#end + +/** + * #(table.getComment()) 服务层实现。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +@Service("#(firstCharToLowerCase(entityClassName))Service") +#if(isCacheExample) +@CacheConfig(cacheNames = "#(firstCharToLowerCase(entityClassName))") +#end +public class #(table.buildServiceImplClassName()) extends #(serviceImplConfig.buildSuperClassName())<#(table.buildMapperClassName()), #(table.buildEntityClassName())> implements #(table.buildServiceClassName()) { + +#if(isCacheExample) + @Override + @CacheEvict(allEntries = true) + public boolean remove(QueryWrapper query) { + return super.remove(query); + } + + @Override + @CacheEvict(key = "#id") + public boolean removeById(Serializable id) { + return super.removeById(id); + } + + @Override + @CacheEvict(allEntries = true) + public boolean removeByIds(Collection ids) { + return super.removeByIds(ids); + } + + @Override + @CacheEvict(allEntries = true) + public boolean update(#(entityClassName) entity, QueryWrapper query) { + return super.update(entity, query); + } + + @Override + @CacheEvict(key = "#entity.#(primaryKey)") + public boolean updateById(#(entityClassName) entity, boolean ignoreNulls) { + return super.updateById(entity, ignoreNulls); + } + + @Override + @CacheEvict(allEntries = true) + public boolean updateBatch(Collection<#(entityClassName)> entities, int batchSize) { + return super.updateBatch(entities, batchSize); + } + + @Override + @Cacheable(key = "#id") + public #(entityClassName) getById(Serializable id) { + return super.getById(id); + } + + @Override + @Cacheable(key = "#root.methodName + ':' + #query.toSQL()") + public #(entityClassName) getOne(QueryWrapper query) { + return super.getOne(query); + } + + @Override + @Cacheable(key = "#root.methodName + ':' + #query.toSQL()") + public R getOneAs(QueryWrapper query, Class asType) { + return super.getOneAs(query, asType); + } + + @Override + @Cacheable(key = "#root.methodName + ':' + #query.toSQL()") + public List<#(entityClassName)> list(QueryWrapper query) { + return super.list(query); + } + + @Override + @Cacheable(key = "#root.methodName + ':' + #query.toSQL()") + public List listAs(QueryWrapper query, Class asType) { + return super.listAs(query, asType); + } + + /** + * @deprecated 无法通过注解进行缓存操作。 + */ + @Override + @Deprecated + public List<#(entityClassName)> listByIds(Collection ids) { + return super.listByIds(ids); + } + + @Override + @Cacheable(key = "#root.methodName + ':' + #query.toSQL()") + public long count(QueryWrapper query) { + return super.count(query); + } + + @Override + @Cacheable(key = "#root.methodName + ':' + #page.getPageSize() + ':' + #page.getPageNumber() + ':' + #query.toSQL()") + public Page pageAs(Page page, QueryWrapper query, Class asType) { + return super.pageAs(page, query, asType); + } + +#end +} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/tableDef.tpl b/Cpop-Generator/src/main/resources/template.enjoy/tableDef.tpl new file mode 100644 index 0000000..f735310 --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/tableDef.tpl @@ -0,0 +1,40 @@ +#set(tableDefClassName = table.buildTableDefClassName()) +#set(schema = table.schema == null ? "" : table.schema) +package #(packageConfig.tableDefPackage); + +import com.mybatisflex.core.query.QueryColumn; +import com.mybatisflex.core.table.TableDef; + +/** + * #(table.getComment()) 表定义层。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +public class #(tableDefClassName) extends TableDef { + + /** + * #(table.getComment()) + */ + public static final #(tableDefClassName) #(tableDefConfig.buildFieldName(table.buildEntityClassName() + tableDefConfig.instanceSuffix)) = new #(tableDefClassName)(); + +#for(column: table.getSortedColumns()) + #(column.buildComment()) + public final QueryColumn #(tableDefConfig.buildFieldName(column.property)) = new QueryColumn(this, "#(column.name)"); + +#end + /** + * 所有字段。 + */ + public final QueryColumn #(tableDefConfig.buildFieldName("allColumns")) = new QueryColumn(this, "*"); + + /** + * 默认字段,不包含逻辑删除或者 large 等字段。 + */ + public final QueryColumn[] #(tableDefConfig.buildFieldName("defaultColumns")) = new QueryColumn[]{#for(column: table.columns)#if(column.isDefaultColumn())#(tableDefConfig.buildFieldName(column.property))#if(for.index + 1 != for.size), #end#end#end}; + + public #(tableDefClassName)() { + super("#(schema)", "#(table.name)"); + } + +} diff --git a/Cpop-Generator/src/main/resources/template.enjoy/vo.tpl b/Cpop-Generator/src/main/resources/template.enjoy/vo.tpl new file mode 100644 index 0000000..2ea861a --- /dev/null +++ b/Cpop-Generator/src/main/resources/template.enjoy/vo.tpl @@ -0,0 +1,103 @@ +#set(withLombok = entityConfig.isWithLombok()) +#set(withSwagger = entityConfig.isWithSwagger()) +#set(swaggerVersion = entityConfig.getSwaggerVersion()) +#set(withActiveRecord = entityConfig.isWithActiveRecord()) +#set(entityClassName = table.buildEntityClassName()) +package #(packageConfig.basePackage).vo; + +#for(importClass : table.buildImports()) +import #(importClass); +#end +#if(withActiveRecord) +import com.mybatisflex.core.activerecord.Model; +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +import io.swagger.v3.oas.annotations.media.Schema; +#end +#if(withLombok) +#if(withActiveRecord) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +#else +import lombok.*; +import lombok.experimental.Accessors; +#end +#end + +/** + * #(table.getComment()) 实体类。 + * + * @author #(javadocConfig.getAuthor()) + * @since #(javadocConfig.getSince()) + */ +#if(withLombok) +#if(withActiveRecord) +@Accessors(chain = true) +@Data(staticConstructor = "create") +@EqualsAndHashCode(callSuper = true) +#else +@Data +@EqualsAndHashCode(callSuper=false) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +#end +#end +#if(withSwagger && swaggerVersion.getName() == "FOX") +@ApiModel("#(table.getComment())") +#end +#if(withSwagger && swaggerVersion.getName() == "DOC") +@Schema(description = "#(table.getComment())") +#end +public class #(entityClassName)Vo#if(withActiveRecord) extends Model<#(entityClassName)>#else#(table.buildImplements())#end { + +#for(column : table.columns) + #set(comment = javadocConfig.formatColumnComment(column.comment)) + #if(isNotBlank(comment)) + /** + * #(comment) + */ + #end + #if(isNotBlank(annotations)) + #(annotations) + #end + #if(withSwagger && swaggerVersion.getName() == "FOX") + @ApiModelProperty("#(column.comment)") + #end + #if(withSwagger && swaggerVersion.getName() == "DOC") + @Schema(description = "#(column.comment)") + #end + private #(column.propertySimpleType) #(column.property)#if(isNotBlank(column.propertyDefaultValue)) = #(column.propertyDefaultValue)#end; + +#end +#if(!withLombok) + #if(withActiveRecord) + public static #(entityClassName) create() { + return new #(entityClassName)(); + } + + #end + #for(column: table.columns) + public #(column.propertySimpleType) #(column.getterMethod())() { + return #(column.property); + } + + #if(withActiveRecord) + public #(entityClassName) #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + return this; + } + #else + public void #(column.setterMethod())(#(column.propertySimpleType) #(column.property)) { + this.#(column.property) = #(column.property); + } + #end + + #end +#end} diff --git a/pom.xml b/pom.xml index 66f4228..3ca921c 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,7 @@ 3.3.2 1.21 0.9.1 + 4.0.3 @@ -78,6 +79,12 @@ Cpop-Core ${cpop.version} + + + com.zaxxer + HikariCP + ${HikariCP.version} + com.mybatis-flex @@ -89,6 +96,12 @@ mybatis-flex-processor ${mybatis-flex.version} + + + com.mybatis-flex + mybatis-flex-codegen + ${mybatis-flex.version} + com.alibaba