# base-code-generator **Repository Path**: zhouzhz/base-code-generator ## Basic Information - **Project Name**: base-code-generator - **Description**: 代码生成器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-02-21 - **Last Updated**: 2025-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1、idea下载安装插件EasyCode ![](https://tcs-devops.aliyuncs.com/storage/1134a9229ebe0682ec6a91fb8d830e9eff83?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTc0MDcxMTkzNywiaWF0IjoxNzQwMTA3MTM3LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMzRhOTIyOWViZTA2ODJlYzZhOTFmYjhkODMwZTllZmY4MyJ9.aOA2jGMO_rbKMMkq9Um1X4rAjt_2Bn5cRSJx3Z0L0_k&download=img_d.png "") # 2、导入json文件 ```json { "author" : "zhouhengzhe", "version" : "1.2.8", "userSecure" : "", "currTypeMapperGroupName" : "Default", "currTemplateGroupName" : "DDD", "currColumnConfigGroupName" : "Default", "currGlobalConfigGroupName" : "Default", "typeMapper" : { "Default" : { "name" : "Default", "elementList" : [ { "matchType" : "REGEX", "columnType" : "varchar(\\(\\d+\\))?", "javaType" : "java.lang.String" }, { "matchType" : "REGEX", "columnType" : "char(\\(\\d+\\))?", "javaType" : "java.lang.String" }, { "matchType" : "REGEX", "columnType" : "(tiny|medium|long)*text", "javaType" : "java.lang.String" }, { "matchType" : "REGEX", "columnType" : "decimal(\\(\\d+,\\d+\\))?", "javaType" : "java.math.BigDecimal" }, { "matchType" : "ORDINARY", "columnType" : "integer", "javaType" : "java.lang.Integer" }, { "matchType" : "REGEX", "columnType" : "(tiny|small|medium)*int(\\(\\d+\\))?", "javaType" : "java.lang.Integer" }, { "matchType" : "ORDINARY", "columnType" : "int4", "javaType" : "java.lang.Integer" }, { "matchType" : "ORDINARY", "columnType" : "int8", "javaType" : "java.lang.Long" }, { "matchType" : "REGEX", "columnType" : "bigint(\\(\\d+\\))?", "javaType" : "java.lang.Long" }, { "matchType" : "ORDINARY", "columnType" : "date", "javaType" : "java.util.Date" }, { "matchType" : "ORDINARY", "columnType" : "datetime", "javaType" : "java.time.LocalDateTime" }, { "matchType" : "ORDINARY", "columnType" : "timestamp", "javaType" : "java.util.Date" }, { "matchType" : "ORDINARY", "columnType" : "time", "javaType" : "java.time.LocalTime" }, { "matchType" : "ORDINARY", "columnType" : "boolean", "javaType" : "java.lang.Boolean" }, { "matchType" : "ORDINARY", "columnType" : "json", "javaType" : "java.lang.String" } ] } }, "template" : { "DDD" : { "name" : "DDD", "elementList" : [ { "name" : "bo.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"BO\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/\",$!{tableInfo.obj.name},\"/model/\"))\n$!callback.setReformat(true)\n\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.$!{tableInfo.obj.name}.model;\n\nimport com.star.common.core.contract.BaseRepository;\nimport com.star.common.core.contract.Model;\n##使用全局变量实现默认包导入\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.repository.$!{tableInfo.name}Repository;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.*;\n\nimport java.time.LocalDateTime;\n\n##使用宏定义实现类注释信息\n#tableComment(\"领域类\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@Builder\n@EqualsAndHashCode(callSuper = true)\npublic class $!{tableName} extends Model{\n\n#foreach($column in $tableInfo.fullColumn)\n #if($!{column.name}!=\"delFlag\")\n #if(${column.comment})\n @Schema(description =\"${column.comment}\")\n #end\n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n #end\n#end\npublic static $!{tableInfo.name}Repository repository() {\n return BaseRepository.of($!{tableInfo.name}BO.class);\n }\n }" }, { "name" : "controller.java.vm", "code" : "## 定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Controller\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/api\"))\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}api;\n\nimport com.star.common.core.contract.Page;\nimport com.star.common.core.contract.R;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.model.$!{tableInfo.name}BO;\nimport $!{tableInfo.savePackageName}.domain.contract.query.$!{tableInfo.name}PageQuery;\nimport $!{tableInfo.savePackageName}.domain.contract.query.$!{tableInfo.name}DetailQuery;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.service.$!{tableInfo.name}Service;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.service.$!{tableInfo.name}QueryService;\nimport io.swagger.v3.oas.annotations.Operation;\nimport io.swagger.v3.oas.annotations.tags.Tag;\nimport lombok.RequiredArgsConstructor;\nimport org.springframework.validation.annotation.Validated;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.bind.annotation.RequestBody;\n\n/**\n * @Author $!author\n * @Desc $!{tableInfo.comment}($!{tableInfo.name})表控制层\n * @Date $!time.currTime()\n */\n@RestController\n@RequestMapping(\"/$!tool.firstLowerCase($tableInfo.name)\")\n@RequiredArgsConstructor\n@Tag(name = \"$!{tableName}控制器\")\npublic class $!{tableName} {\n\nprivate final $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;\n\nprivate final $!{tableInfo.name}QueryService $!tool.firstLowerCase($tableInfo.name)QueryService;\n\n@Operation(summary = \"条件分页查询\")\n@PostMapping(\"/page\")\npublic R> page(@RequestBody $!{tableInfo.name}PageQuery query) {\n return R.ok($!{tool.firstLowerCase($tableInfo.name)}QueryService.page(query));\n}\n\n@Operation(summary = \"根据ID查详情\")\n@PostMapping(\"/queryById\")\npublic R<$!{tableInfo.name}BO> queryById(@RequestBody @Validated $!{tableInfo.name}DetailQuery query) {\n return R.ok($!{tool.firstLowerCase($tableInfo.name)}QueryService.queryById(query));\n}\n\n@Operation(summary = \"新增\")\n@PostMapping(\"/insert\")\npublic R insert(@RequestBody @Validated $!{tableInfo.name}AddCommand command) {\n $!{tool.firstLowerCase($tableInfo.name)}Service.insert(command);\n return R.ok();\n}\n\n@Operation(summary = \"编辑数据\")\n@PostMapping(\"/update\")\npublic R update(@RequestBody @Validated $!{tableInfo.name}UpdateCommand command) {\n $!{tool.firstLowerCase($tableInfo.name)}Service.update(command);\n return R.ok();\n}\n\n@Operation(summary = \"删除数据\")\n@PostMapping(\"/deleteById\")\npublic R deleteById(@RequestBody @Validated $!{tableInfo.name}DeleteCommand command) {\n $!{tool.firstLowerCase($tableInfo.name)}Service.deleteById(command);\n return R.ok();\n}\n\n}" }, { "name" : "entity.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##使用宏定义设置回调(保存位置与文件后缀)\n#save(\"/infras/repository/entity\", \"PO.java\")\n\n##使用宏定义设置包后缀\n#setPackageSuffix(\"infras.repository.entity\")\n$!callback.setReformat(true)\n##使用全局变量实现默认包导入\n$!{autoImport.vm}\nimport com.baomidou.mybatisplus.annotation.*;\nimport com.star.common.orm.annotation.OnCreate;\nimport com.star.common.orm.annotation.OrderBy;\nimport com.star.common.orm.annotation.OnUpdate;\n#if($!{column.name}==\"tenantId\")\nimport com.star.common.orm.annotation.TenantId;\n#end\n#if($!{column.name}==\"systemId\")\nimport com.star.common.orm.annotation.SystemId;\n#end\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.*;\n\nimport java.io.Serializable;\n\n##使用宏定义实现类注释信息\n#tableComment(\"$!{tableInfo.name} 实体类\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@Builder\n@TableName(\"$!tableInfo.obj.name\")\n#if($!{column.name}==\"createTime\")\n@OrderBy(\"create_time\")\n#end\npublic class $!{tableInfo.name}PO implements Serializable {\n /**\n * 序列化号\n */\n private static final long serialVersionUID = $!tool.serial();\n\n #foreach($column in $tableInfo.fullColumn)\n #if($!{column.name}==\"id\")\n @TableId(type = IdType.ASSIGN_ID)\n #end\n #if($!{column.name}==\"createTime\")\n @OnCreate\n #end\n #if($!{column.name}==\"updateTime\")\n @OnCreate\n @OnUpdate\n #end\n #if($!{column.name}==\"delFlag\")\n @TableLogic\n #end\n #if($!{column.name}==\"tenantId\")\n @TenantId\n #end\n #if($!{column.name}==\"systemId\")\n @SystemId\n #end\n #if(${column.comment})\n @Schema(description =\"${column.comment}\")\n #end\n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n\n #end\n}" }, { "name" : "mapper.java.vm", "code" : "\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Mapper\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/infras/repository/mapper\"))\n$!callback.setReformat(true)\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}infras.repository.mapper;\nimport $!{tableInfo.savePackageName}.infras.repository.entity.$!{tableInfo.name}PO;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apache.ibatis.annotations.Mapper;\n\n/**\n * @Author $!author\n * @Desc $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层\n * @Date $!time.currTime()\n */\n@Mapper\npublic interface $!{tableName} extends BaseMapper<$!{tableInfo.name}PO> {\n }" }, { "name" : "mapper.xml.vm", "code" : " ##引入mybatis支持\n $!{mybatisSupport.vm}\n\n ##设置保存名称与保存位置\n $!callback.setFileName($tool.append($!{tableInfo.name}, \"Mapper.xml\"))\n $!callback.setSavePath($tool.append($modulePath, \"/src/main/resources/mapper\"))\n\n ##拿到主键\n #if(!$tableInfo.pkColumn.isEmpty())\n #set($pk = $tableInfo.pkColumn.get(0))\n #end\n\n \n \n \n\n " }, { "name" : "param.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Param\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/contract/param\"))\n$!callback.setReformat(true)\n\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.contract.param;\n\nimport com.star.common.core.contract.BaseRepository;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.repository.$!{tableInfo.name}Repository;\nimport com.star.common.core.contract.Query;\n##使用全局变量实现默认包导入\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.*;\n\n##使用宏定义实现类注释信息\n#tableComment(\"领域参数类\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@Builder\n@EqualsAndHashCode(callSuper = true)\npublic class $!{tableName} extends Query{\n@Schema(description = \"主键ID\")\nprivate String id;\n@Override\npublic $!{tableInfo.name}Repository repository() {\n return BaseRepository.of($!{tableInfo.name}Param.class);\n }\n }" }, { "name" : "repository.java.vm", "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Repository\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/\",$!{tableInfo.obj.name},\"/repository/\"))\n$!callback.setReformat(true)\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.$!{tableInfo.obj.name}.repository;\n\nimport com.star.common.core.contract.BaseRepository;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.model.$!{tableInfo.name}BO;\nimport $!{tableInfo.savePackageName}.domain.contract.param.$!{tableInfo.name}Param;\n/**\n * @Author $!author\n * @Desc $!{tableInfo.comment}($!{tableInfo.name})表服务接口\n * @Date $!time.currTime()\n */\npublic interface $!{tableName} extends BaseRepository<$!{tableInfo.name}BO, $!{tableInfo.name}Param> {\n }" }, { "name" : "repositoryImpl.java.vm", "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"RepositoryImpl\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/infras/repository/impl\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}infras.repository.impl;\n\nimport com.star.common.orm.repository.impl.BaseRepositoryImpl;\nimport $!{tableInfo.savePackageName}.domain.contract.param.$!{tableInfo.name}Param;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.model.$!{tableInfo.name}BO;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.repository.$!{tableInfo.name}Repository;\nimport $!{tableInfo.savePackageName}.infras.repository.mapper.$!{tableInfo.name}Mapper;\nimport $!{tableInfo.savePackageName}.infras.repository.entity.$!{tableInfo.name}PO;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.stereotype.Repository;\n\n/**\n * @Author $!author\n * @Desc $!{tableInfo.comment}($!{tableInfo.name})表服务实现类\n * @Date $!time.currTime()\n */\n@Slf4j\n@Repository\npublic class $!{tableName}\nextends BaseRepositoryImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}BO,$!{tableInfo.name}PO,$!{tableInfo.name}Param>\n implements $!{tableInfo.name}Repository {\n\n }" }, { "name" : "service.java.vm", "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Service\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/\",$!{tableInfo.obj.name},\"/service/\"))\n$!callback.setReformat(true)\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.$!{tableInfo.obj.name}.service;\n\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.model.$!{tableInfo.name}BO;\nimport $!{tableInfo.savePackageName}.domain.contract.command.$!{tableInfo.name}AddCommand;\nimport $!{tableInfo.savePackageName}.domain.contract.command.$!{tableInfo.name}UpdateCommand;\nimport $!{tableInfo.savePackageName}.domain.contract.command.$!{tableInfo.name}DeleteCommand;\nimport lombok.RequiredArgsConstructor;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.stereotype.Service;\n/**\n * @Author $!author\n * @Desc $!{tableInfo.comment}($!{tableInfo.name})表领域处理服务类\n * @Date $!time.currTime()\n */\n@Slf4j\n@Service\n@RequiredArgsConstructor\npublic class $!{tableName} {\n\npublic void insert($!{tableInfo.name}AddCommand command) {\n BeanKit.copy(command, $!{tableInfo.name}BO.class).save();\n}\n\npublic void update($!{tableInfo.name}UpdateCommand command) {\n BeanKit.copy(command, $!{tableInfo.name}BO.class).update();\n}\n\npublic void deleteById($!{tableInfo.name}DeleteCommand command) {\n $!{tableInfo.name}BO.repository().delete(command.getId());\n}\n }" }, { "name" : "queryservice.java.vm", "code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"QueryService\"))\n#set($tableName1 = $tool.append($tableInfo.name))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/\",$!{tableInfo.obj.name},\"/service/\"))\n$!callback.setReformat(true)\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.$!{tableInfo.obj.name}.service;\n\nimport com.star.common.core.contract.Page;\nimport $!{tableInfo.savePackageName}.domain.contract.param.$!{tableInfo.name}Param;\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.model.$!{tableInfo.name}BO;\nimport $!{tableInfo.savePackageName}.domain.contract.query.$!{tableInfo.name}DetailQuery;\nimport $!{tableInfo.savePackageName}.domain.contract.query.$!{tableInfo.name}PageQuery;\nimport lombok.RequiredArgsConstructor;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.stereotype.Service;\n/**\n * @Author $!author\n * @Desc $!{tableInfo.comment}($!{tableInfo.name})表领域处理服务类\n * @Date $!time.currTime()\n */\n@Slf4j\n@Service\n@RequiredArgsConstructor\npublic class $!{tableName} {\n\n/**\n* 分页查询数据\n* @param query\n* @return\n*/\npublic Page<$!{tableInfo.name}BO> page($!{tableInfo.name}PageQuery query) {\n return $!{tableInfo.name}Param.builder().id(query.getId()).build().page();\n}\n\n/**\n * 根据ID查询数据\n * @param query\n * @return\n */\npublic $!{tableInfo.name}BO queryById($!{tableInfo.name}DetailQuery query) {\n return $!{tableInfo.name}Param.builder().id(query.getId()).build().one();\n}\n }" }, { "name" : "pagequery.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"PageQuery\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/contract/query\"))\n$!callback.setReformat(true)\n\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.contract.query;\n\nimport com.star.common.core.contract.BasePageQuery;\n##使用全局变量实现默认包导入\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.*;\nimport lombok.experimental.SuperBuilder;\n\n##使用宏定义实现类注释信息\n#tableComment(\"分页查询类\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@SuperBuilder\n@EqualsAndHashCode(callSuper = true)\npublic class $!{tableName} extends BasePageQuery{\n @Schema(description = \"主键ID\")\n private String id;\n\n}" }, { "name" : "detailquery.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"DetailQuery\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/contract/query\"))\n$!callback.setReformat(true)\n\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.contract.query;\n\nimport com.star.common.core.contract.BasePageQuery;\n##使用全局变量实现默认包导入\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport jakarta.validation.constraints.NotBlank;\nimport lombok.*;\nimport lombok.experimental.SuperBuilder;\n\nimport java.io.Serializable;\n\n##使用宏定义实现类注释信息\n#tableComment(\"查询详情类\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@SuperBuilder\npublic class $!{tableName} implements Serializable{\n\n @Schema(description = \"主键ID\")\n @NotBlank(message = \"主键ID不能为空\")\n private String id;\n\n}" }, { "name" : "addcommand.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"AddCommand\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/contract/command\"))\n$!callback.setReformat(true)\n\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.contract.command;\n\nimport com.star.common.core.contract.BaseRepository;\nimport com.star.common.core.contract.Model;\n##使用全局变量实现默认包导入\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.repository.$!{tableInfo.name}Repository;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.*;\n\nimport java.io.Serializable;\nimport java.time.LocalDateTime;\n\n##使用宏定义实现类注释信息\n#tableComment(\"添加\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@Builder\npublic class $!{tableName} implements Serializable {\n\n #foreach($column in $tableInfo.fullColumn)\n #if($!{column.name}!=\"delFlag\" || $!{column.name}!=\"createTime\" || $!{column.name}!=\"updateTime\" || $!{column.name}!=\"id\")\n #if(${column.comment})\n @Schema(description =\"${column.comment}\")\n #end\n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n #end\n #end\n}" }, { "name" : "deletecommand.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"DeleteCommand\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/contract/command\"))\n$!callback.setReformat(true)\n\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.contract.command;\n\nimport com.star.common.core.contract.BaseRepository;\nimport com.star.common.core.contract.Model;\nimport jakarta.validation.constraints.NotBlank;\n##使用全局变量实现默认包导入\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.repository.$!{tableInfo.name}Repository;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.*;\n\nimport java.io.Serializable;\nimport java.time.LocalDateTime;\n\n##使用宏定义实现类注释信息\n#tableComment(\"删除\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@Builder\npublic class $!{tableName} implements Serializable {\n\n #foreach($column in $tableInfo.fullColumn)\n #if($!{column.name}==\"id\")\n #if(${column.comment})\n @Schema(description =\"${column.comment}\")\n #end\n @NotBlank(message = \"主键ID不能为空\")\n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n #end\n #end\n}" }, { "name" : "updatecommand.java.vm", "code" : "##引入宏定义\n$!{define.vm}\n\n##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"UpdateCommand\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/domain/contract/command\"))\n$!callback.setReformat(true)\n\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}domain.contract.command;\n\nimport com.star.common.core.contract.BaseRepository;\nimport com.star.common.core.contract.Model;\n##使用全局变量实现默认包导入\nimport $!{tableInfo.savePackageName}.domain.$!{tableInfo.obj.name}.repository.$!{tableInfo.name}Repository;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.*;\n\nimport java.io.Serializable;\nimport java.time.LocalDateTime;\n\n##使用宏定义实现类注释信息\n#tableComment(\"更新\")\n@Data\n@AllArgsConstructor\n@NoArgsConstructor\n@Builder\npublic class $!{tableName} implements Serializable {\n\n #foreach($column in $tableInfo.fullColumn)\n #if($!{column.name}!=\"delFlag\" || $!{column.name}!=\"createTime\" || $!{column.name}!=\"updateTime\")\n #if(${column.comment})\n @Schema(description =\"${column.comment}\")\n #end\n private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n #end\n #end\n}" } ] } }, "columnConfig" : { "Default" : { "name" : "Default", "elementList" : [ { "title" : "disable", "type" : "BOOLEAN", "selectValue" : "" }, { "title" : "support", "type" : "SELECT", "selectValue" : "add,edit,query,del,ui" } ] } }, "globalConfig" : { "Default" : { "name" : "Default", "elementList" : [ { "name" : "autoImport.vm", "value" : "##自动导入包(仅导入实体属性需要的包,通常用于实体类)\n#foreach($import in $importList)\nimport $!import;\n#end" }, { "name" : "define.vm", "value" : "##(Velocity宏定义)\n\n##定义设置表名后缀的宏定义,调用方式:#setTableSuffix(\"Test\")\n#macro(setTableSuffix $suffix)\n #set($tableName = $!tool.append($tableInfo.name, $suffix))\n#end\n\n##定义设置包名后缀的宏定义,调用方式:#setPackageSuffix(\"Test\")\n#macro(setPackageSuffix $suffix)\n#if($suffix!=\"\")package #end#if($tableInfo.savePackageName!=\"\")$!{tableInfo.savePackageName}.#{end}$!suffix;\n#end\n\n##定义直接保存路径与文件名简化的宏定义,调用方式:#save(\"/entity\", \".java\")\n#macro(save $path $fileName)\n $!callback.setSavePath($tool.append($tableInfo.savePath, $path))\n $!callback.setFileName($tool.append($tableInfo.name, $fileName))\n#end\n\n##定义表注释的宏定义,调用方式:#tableComment(\"注释信息\")\n#macro(tableComment $desc)\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})$desc\n *\n * @author $!author\n * @since $!time.currTime()\n */\n#end\n\n##定义GET,SET方法的宏定义,调用方式:#getSetMethod($column)\n#macro(getSetMethod $column)\n\n public $!{tool.getClsNameByFullName($column.type)} get$!{tool.firstUpperCase($column.name)}() {\n return $!{column.name};\n }\n\n public void set$!{tool.firstUpperCase($column.name)}($!{tool.getClsNameByFullName($column.type)} $!{column.name}) {\n this.$!{column.name} = $!{column.name};\n }\n#end" }, { "name" : "init.vm", "value" : "##初始化区域\n\n##去掉表的t_前缀\n$!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst(\"book_\",\"\")))\n\n##参考阿里巴巴开发手册,POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误\n#foreach($column in $tableInfo.fullColumn)\n#if($column.name.startsWith(\"is\") && $column.type.equals(\"java.lang.Boolean\"))\n $!column.setName($tool.firstLowerCase($column.name.substring(2)))\n#end\n#end\n\n##实现动态排除列\n#set($temp = $tool.newHashSet(\"testCreateTime\", \"otherColumn\"))\n#foreach($item in $temp)\n #set($newList = $tool.newArrayList())\n #foreach($column in $tableInfo.fullColumn)\n #if($column.name!=$item)\n ##带有反回值的方法调用时使用$tool.call来消除返回值\n $tool.call($newList.add($column))\n #end\n #end\n ##重新保存\n $tableInfo.setFullColumn($newList)\n#end\n\n##对importList进行篡改\n#set($temp = $tool.newHashSet())\n#foreach($column in $tableInfo.fullColumn)\n #if(!$column.type.startsWith(\"java.lang.\"))\n ##带有反回值的方法调用时使用$tool.call来消除返回值\n $tool.call($temp.add($column.type))\n #end\n#end\n##覆盖\n#set($importList = $temp)" }, { "name" : "mybatisSupport.vm", "value" : "##针对Mybatis 进行支持,主要用于生成xml文件\n#foreach($column in $tableInfo.fullColumn)\n ##储存列类型\n $tool.call($column.ext.put(\"sqlType\", $tool.getField($column.obj.dataType, \"typeName\")))\n #if($tool.newHashSet(\"java.lang.String\").contains($column.type))\n #set($jdbcType=\"VARCHAR\")\n #elseif($tool.newHashSet(\"java.lang.Boolean\", \"boolean\").contains($column.type))\n #set($jdbcType=\"BOOLEAN\")\n #elseif($tool.newHashSet(\"java.lang.Byte\", \"byte\").contains($column.type))\n #set($jdbcType=\"BYTE\")\n #elseif($tool.newHashSet(\"java.lang.Integer\", \"int\", \"java.lang.Short\", \"short\").contains($column.type))\n #set($jdbcType=\"INTEGER\")\n #elseif($tool.newHashSet(\"java.lang.Long\", \"long\").contains($column.type))\n #set($jdbcType=\"INTEGER\")\n #elseif($tool.newHashSet(\"java.lang.Float\", \"float\", \"java.lang.Double\", \"double\").contains($column.type))\n #set($jdbcType=\"NUMERIC\")\n #elseif($tool.newHashSet(\"java.util.Date\", \"java.sql.Timestamp\", \"java.time.Instant\", \"java.time.LocalDateTime\", \"java.time.OffsetDateTime\", \"\tjava.time.ZonedDateTime\").contains($column.type))\n #set($jdbcType=\"TIMESTAMP\")\n #elseif($tool.newHashSet(\"java.sql.Date\", \"java.time.LocalDate\").contains($column.type))\n #set($jdbcType=\"TIMESTAMP\")\n #else\n ##其他类型\n #set($jdbcType=\"VARCHAR\")\n #end\n $tool.call($column.ext.put(\"jdbcType\", $jdbcType))\n#end\n\n##定义宏,查询所有列\n#macro(allSqlColumn)#foreach($column in $tableInfo.fullColumn)$column.obj.name#if($velocityHasNext), #end#end#end\n" } ] } } } ``` ![](https://tcs-devops.aliyuncs.com/storage/1134b21e89f57738d2805f957aedb2f78f35?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTc0MDcxMTkzNywiaWF0IjoxNzQwMTA3MTM3LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMzRiMjFlODlmNTc3MzhkMjgwNWY5NTdhZWRiMmY3OGYzNSJ9.K6bzT8C6JPgOC0671dAvD6ZIpaM46Z5mGWzVGLjIVb4&download=img_d1.png "") 3、使用idea的Datasource连接对应的数据库,然后选择对应的表 ![](https://tcs-devops.aliyuncs.com/storage/113451e2e0229f4652ec1b6bc661f9d99b69?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTc0MDcxMTkzNywiaWF0IjoxNzQwMTA3MTM3LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMzQ1MWUyZTAyMjlmNDY1MmVjMWI2YmM2NjFmOWQ5OWI2OSJ9.lrYr5Oj1gA7V7QCGihI_DSA2vi6TgLDNsmYi6wNL0V4&download=img_d3.png "") 填写账号密码信息 ![](https://tcs-devops.aliyuncs.com/storage/1134a91a36cbae8ccc221f59e1a407b80f9d?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTc0MDcxMTkzNywiaWF0IjoxNzQwMTA3MTM3LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMzRhOTFhMzZjYmFlOGNjYzIyMWY1OWUxYTQwN2I4MGY5ZCJ9.0dokcvTi8_y-7tcF_TMS43KDxL8SVa4gfwCkfh4jvP0&download=img_d4.png "") 进入对应的表 ![](https://tcs-devops.aliyuncs.com/storage/113429109c7772c4c163178a67b9953de5f7?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTc0MDcxMTkzNywiaWF0IjoxNzQwMTA3MTM3LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMzQyOTEwOWM3NzcyYzRjMTYzMTc4YTY3Yjk5NTNkZTVmNyJ9.qtX_XuMGrVJ7oV950KRm4bT29Ibo-7NaEGQdm41ftbU&download=img_d5.png "") 4、开始生成 - 右键对应的表,选择代码生成 ![](https://tcs-devops.aliyuncs.com/storage/113450036dfa5ccff23dca09fad54c834e51?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTc0MDcxMTkzNywiaWF0IjoxNzQwMTA3MTM3LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMzQ1MDAzNmRmYTVjY2ZmMjNkY2EwOWZhZDU0YzgzNGU1MSJ9.O43bIsfb_sqyYiNNB84wXYULDobH400UkFxfYH9ay_U&download=img_d6.png "") ![](https://tcs-devops.aliyuncs.com/storage/1134943c53e99dcbb420341542f978427059?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTc0MDcxMTkzNywiaWF0IjoxNzQwMTA3MTM3LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMzQ5NDNjNTNlOTlkY2JiNDIwMzQxNTQyZjk3ODQyNzA1OSJ9.iSfV1ekcEtZqIKxl1lbulzOGiucfJ3UFoqk6MeDVVaU&download=img_d2.png "")