# Lucky-Generation-MP **Repository Path**: xiaodu6/lucky-generation-mp ## Basic Information - **Project Name**: Lucky-Generation-MP - **Description**: 基于MyBatisPlusVer:3.5.12 的代码生成器,使用 velocity 模板生成器,在支持MybatisPlus的代码生成变量的基础上新增更多环境变量,如:表主键,主键类型,主键Java类型,主键TypeScript类型,大驼峰表名、属性名、小驼峰表名、属性名,实体名称等超多自定义变量 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-18 - **Last Updated**: 2025-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Lucky-Generation-MP ## 介绍 基于MyBatisPlusVer:3.5.12 的代码生成器,使用 velocity 模板生成器,在支持MybatisPlus的代码生成变量的基础上新增更多环境变量,如:表主键,主键类型,主键Java类型,主键TypeScript类型,大驼峰表名、属性名、小驼峰表名、属性名,实体名称等超多自定义变量 ## 软件架构 多模块,单体Spring应用 ## 安装教程 1. 拉取代码 2. 配置数据库连接 3. 运行Main方法生成代码 ## 使用说明 ### 1.配置数据库连接 位置: `mysql-generation/generation/src/main/java/cn/anlucky/admin/generation/GenerationApplication.java` ~~~java public static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/admin?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true"; public static final String DB_USER_NAME = "root"; public static final String DB_PASSWORD = "123456"; ~~~ ### 2.配置包、模块名称 ~~~java // 包 private static final String parentPackage = "cn.anlucky.admin"; // 模块 private static final String moduleName = "demo"; ~~~ ### 3.代码生成位置以及其他配置 代码文件生成默认位置:`D:/Generator/lucky` 配置文件:`mysql-generation/generation/src/main/java/cn/anlucky/admin/generation/bean/GenerationPoBean.java` ### 4.配置表名称运行Main方法 在Main方法中添加表名称 ~~~java List tableNames = new ArrayList<>(); ~~~ ## 模板可用变量 ~~~java project相关 project1.packageName cn.anlucky.admin.system // 完整包名 包路径 + 模块名称 project1.moduleName system // 模块名称 project1.entityName SysUsers // Java实体名称 SysUsers(根据配置改变) project1.mapperName SysUsersMapper // JAVA Mapper SysUsersMapper(根据配置改变) project1.mapperXmlName SysUsersMapper // JAVA Mapper XML SysUsersMapperXML(根据配置改变) project1.serviceName SysUsersService // JAVA Service SysUsersService(根据配置改变) project1.serviceImplName SysUsersServiceImp // JAVA ServiceImpl SysUsersServiceImpl(根据配置改变) project1.controllerName SysUsersController // JAVA Controller SysUsersController(根据配置改变) table相关 table1.tableName sys_users // 表名称 sys_users table1.comment 用户信息 // 表注释 用户信息表 table1.tableKey id // 主键字段名 id table1.tableKeyComment 用户ID // 主键注释 用户Id table1.tableKeyType LONG // 全大写的JAVA类型 如:String -> STRING Long -> LONG java相关 java1.tableName SysUsers // 大驼峰表名 下划线根据代码生成器的配置而改变默认配置已转换 SysUsers java1.tableNamePath sysUsers // 小驼峰表名 下划线根据代码生成器的配置而改变默认配置已转换 sysUsers java1.tableNameSmall sysusers // 全小写表名 下划线根据代码生成器的配置而改变默认配置已转换 sysusers java1.tableKey Id // 主键大驼峰 Id java1.tableKeyPath id // 主键小驼峰 id java1.tableKeyType Long // 大驼峰的JAVA类型 如:String -> String java1.tableKeyTsType number // 主键ts类型 genTableField 相关 字段注释可参考 类 GenTableField.java field1.columnName id field1.columnComment 用户ID field1.javaColumnName Id field1.javaColumnNamePath id field1.isTableKey true field1.isLogicDeleteField false field1.isFill false field1.fill field1.javaType Long field1.tsType number field1.isRequired true field1.JdbcType BIGINT field1.defaultValue field1.columnMaxLength 19 ~~~ ## 支持自定义变量 ### 为系统添加自定义变量 方法位置: `cn.anlucky.admin.generation.config.GenerationConfig.getInjectionConfigBuilder` 非表配置相关变量: project1 表相关变量: table1 表字段相关变量: field1 > 建议: 这里新增系统变量project1、table1、field1的完善,不建议增加一些写死的变量 ### 自定义变量 在Main方法中添加自定义变量 ~~~java // 自定义变量 map.put("my","自定义变量"); // 模板中使用${my} map.put("my2","自定义变量2"); // 模板中使用${my2} generationPo.setOtherTemplateParams(map); ~~~ ## 支持多数据库 1. cn.anlucky.admin.generation.bean.GenerationPoBean 文件中,复制粘贴一份配置文件(注意修改方法名称但返回值必须是GenerationPo) ~~~java public static GenerationPo getGenerationPo(String dbUrl,String dbUserName,String dbPassword) { GenerationPo generationPo = new GenerationPo(); // 作者 generationPo.setAuthor("Lucky"); // 生成代码文件输出位置 generationPo.setOutputDir("D:/Generator/lucky"); // 新增 时间自动填充 generationPo.setCreateTimeField("create_time"); // 修改 时间自动填充 generationPo.setUpdateTimeField("update_time"); // 新增 创建人自动填充 generationPo.setCreateByField("create_by"); // 修改 修改人自动填充 generationPo.setUpdateByField("update_by"); // 删除 逻辑删除字段 generationPo.setDeleteFlagField("del_flag"); // 实体类包名 generationPo.setEntityPackage("povo"); // mapper包名 generationPo.setMapperPackage("mapper"); generationPo.setMapperXmlPackage("mapper"); generationPo.setServicePackage("service"); generationPo.setServiceImplPackage("service.impl"); generationPo.setControllerPackage("controller"); // 模板 generationPo.setEntityTemplate("/templates/java/entity.java"); generationPo.setMapperTemplate("/templates/java/mapper.java"); generationPo.setMapperXmlTemplate("/templates/xml/mapper.xml"); generationPo.setServiceTemplate("/templates/java/service.java"); generationPo.setServiceImplTemplate("/templates/java/serviceImpl.java"); generationPo.setControllerTemplate("/templates/java/controller.java"); // 添加自定义模板 List customFiles = new ArrayList<>(); CustomFile constants = new CustomFile.Builder() .fileName("/constants.txt") .templatePath("/templates/constants.vm") .packageName("constants") .enableFileOverride().build(); CustomFile apiTs = new CustomFile.Builder() .formatNameFunction(tableInfo -> { // 小驼峰表名 String camelCase = StringUtils.toCamelCase(tableInfo.getName()); // vue/表/api/小驼峰.api.ts return "/"+camelCase+"/api/"+ camelCase; }) .fileName(".api.ts") .templatePath("/templates/ts/api.ts.vm") .packageName("vue") .enableFileOverride().build(); CustomFile vueIndex = new CustomFile.Builder() .formatNameFunction(tableInfo -> { // 小驼峰表名 String camelCase = StringUtils.toCamelCase(tableInfo.getName()); // vue/表/views/index.vue return "/"+camelCase+"/views/index"; }) .fileName(".vue") .templatePath("/templates/vue/index.vue.vm") .packageName("vue") .enableFileOverride().build(); CustomFile sql = new CustomFile.Builder() .formatNameFunction(tableInfo -> { // 小驼峰表名 String camelCase = StringUtils.toCamelCase(tableInfo.getName()); // sql/表.sql return "/"+camelCase; }) .fileName(".sql") .templatePath("/templates/menus/menus.sql.vm") .packageName("sql") .enableFileOverride().build(); customFiles.add(constants); customFiles.add(apiTs); customFiles.add(vueIndex); customFiles.add(sql); // 添加自定义参数 Map map = new HashMap<>(); generationPo.setOtherTemplates(customFiles); generationPo.setOtherTemplateParams(map); return generationPo; } ~~~ 2. 如下模板创建Main方法 ~~~java // 数据库连接 public static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/lucky_admin?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true"; public static final String DB_USER_NAME = "root"; public static final String DB_PASSWORD = "123456"; // 代码生成配置 // 配置Po对象 Todo: 请使用自己第一步骤创建的Po对象 private static GenerationPo generationPo = GenerationPoBean.getGenerationPo(DB_URL, DB_USER_NAME, DB_PASSWORD); // 模板变量 public static final Map map = new HashMap<>(); // 包 private static final String parentPackage = "cn.anlucky.admin"; // 模块 private static final String moduleName = "demo"; public static void main(String[] args) { // 自定义变量 map.put("my","自定义变量"); // 模板中使用${my} map.put("my2","自定义变量2"); // 模板中使用${my2} generationPo.setOtherTemplateParams(map); List tableNames = new ArrayList<>(); tableNames.add("sys_users"); tableNames.add("sys_roles"); GenerationCodeService generationCodeService = new GenerationCodeServiceImpl(generationPo); // 预览代码 // Map map = generationCodeService.previewCode(parentPackage, moduleName, tableNames); // System.out.println("map = " + map); // 生成代码文件 generationCodeService.generateCode(parentPackage, moduleName, tableNames); } ~~~ ## 扩展 ### 抽取配置 整个MyBatisPlus的代码生成配置全在 `mysql-generation/generation/src/main/java/cn/anlucky/admin/generation/config/GenerationConfig.java` 若 GenerationPo 未出现自己想要的自定义配置,可参考MyBatisPlus的文档,自行抽取变量进行修改添加或提交 issue ### 支持多模板和自定义模板 lucky-generation 提供了一套代码生成模板,可自己创建文件夹,并添加自己的模板并修改配置文件 ~~~java generationPo.setEntityTemplate("/templates/default/java/entity.java"); generationPo.setMapperTemplate("/templates/default/java/mapper.java"); generationPo.setMapperXmlTemplate("/templates/default/xml/mapper.xml"); generationPo.setServiceTemplate("/templates/default/java/service.java"); generationPo.setServiceImplTemplate("/templates/default/java/serviceImpl.java"); generationPo.setControllerTemplate("/templates/default/java/controller.java"); ~~~ 在resource/templates/ 创建文件夹,放入自己的模板完成配置 ## 致谢 若对您有帮助,请给个Starred吧,谢谢 ## 常见问题 ### 1.按照要求配置完成后运行方法无法生成代码 检查待生成的表名是否正确 ### 2.如何自定义变量 在Main方法中的Map中Put自己的变量 Key为模板中使用的变量名称`${变量名称}` value 则为使用的值