Lucky-AdminLucky-Admin
简介
快速开始
代码生成
  • Lucky-Admin-Vue3
  • Ruo-Yi
  • Vue-Admin
  • Sa-Token
  • vue3-element-admin
简介
快速开始
代码生成
  • Lucky-Admin-Vue3
  • Ruo-Yi
  • Vue-Admin
  • Sa-Token
  • vue3-element-admin
  • Lucky-Admin

    • 简介
    • 快速开始
    • 代码生成
    • 在线预览
    • 后端常见问题
    • 前端常见问题
    • 移动端常见问题
  • 社交

介绍

当前项目的代码生成器是基于 MyBatisPlus(Version:3.5.12)的代码生成器,使用 velocity 模板生成器,在支持MybatisPlus的代码生成变量的基础上新增更多环境变量,如:表主键,主键类型,主键Java类型,主键TypeScript类型,大驼峰表名、属性名、小驼峰表名、属性名,实体名称等超多自定义变量

使用方法

目录文件:src/test/java/cn/anlucky/admin

@SpringBootTest
class GenerationCodeServiceImplTest {

    @Autowired
    private GenerationCodeService generationCodeService;

    /**
     * 预览代码
     */
    @Test
    void previewCode() {
        List<String> list = new ArrayList<>();
        list.add("sys_users");
        Map<String, String> map = generationCodeService.previewCode("cn.anlucky.admin", "system", list);
        System.out.println("map = " + map.get("constants"));

    }

    /**
     * 生成代码文件
     */
    @Test
    void generateCode() {
        List<String> list = new ArrayList<>();
        list.add("sys_users");
        list.add("sys_roles");
        list.add("sys_user_roles");
        list.add("sys_menus");
        list.add("sys_roles_menus");
        list.add("sys_oper_log");
        list.add("sys_login_log");
        list.add("sys_files");
        list.add("sys_business_files");
        list.add("sys_dict");
        list.add("sys_dict_item");
        generationCodeService.generateCode("cn.anlucky.admin", "system", list);
    }
}

重要

代码生成所使用的数据库是 application.yml 配置激活环境的数据库

重要

因在打包时会执行Test,所以在打包时可以将代码生成的Test注释掉

文件位置

代码生成的文件所在位置的配置 src/main/java/cn/anlucky/admin/system/gen/bean/GenerationPoBean.java

// 设置文件输出路径
generationPo.setOutputDir("D:/Generator/lucky");

模板变量

// 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

自定义模板变量

重要

若您理解不了代码生成器的原理,请勿修改代码生成器的代码
  1. 配置文件位置

cn.anlucky.admin.system.gen.config.GenerationConfig

  1. 方法位置

getInjectionConfigBuilder()

  1. 代码位置

行: 176 后面 使用object.put(key,value); 添加要自定义的变量

  1. 若您不慎修改了代码,可使用下面恢复默认代码
    /**
     * 获取注入配置构建器
     *
     * @param tableNames 数据库表名称
     * @return InjectionConfig.Builder
     */
    private InjectionConfig.Builder getInjectionConfigBuilder(List<String> tableNames) {
        return new InjectionConfig.Builder()
                .customFile(generationPo.getOtherTemplates())
                .customMap(generationPo.getOtherTemplateParams())
                .beforeOutputFile((tableInfo, objectMap) -> {
                    // 可以在这里添加自定义逻辑,如修改 objectMap 中的配置
                    // 表格
                    HashMap<String, Object> table = new HashMap<>();
                    // 表格java
                    HashMap<String, Object> java = new HashMap<>();
                    // 项目数据
                    HashMap<String, Object> project = new HashMap<>();
                    // 包名 parent + moduleName
                    project.put("packageName", tableInfo.getPackageConfig().getParent());
                    // 模块名
                    project.put("moduleName",tableInfo.getPackageConfig().getModuleName());
                    // 实体名
                    project.put("entityName",tableInfo.getEntityName());
                    project.put("mapperName",tableInfo.getMapperName());
                    project.put("mapperXmlName",tableInfo.getXmlName());
                    project.put("serviceName",tableInfo.getServiceName());
                    project.put("serviceImplName",tableInfo.getServiceImplName());
                    project.put("controllerName",tableInfo.getControllerName());
                    // 表注释
                    table.put("tableName",tableInfo.getName());
                    table.put("comment",tableInfo.getComment());
                    // 数据库表名称
                    java.put("tableNameSmall", StringUtils.toRootLowerCase(tableInfo.getEntityName()));
                    java.put("tableName",tableInfo.getEntityName());
                    java.put("tableNamePath", tableInfo.getEntityPath());
                    List<GenTableField> genTableFields = new ArrayList<>();
                    tableInfo.getFields().forEach(field -> {
                        GenTableField genTableField = new GenTableField();
                        genTableField.setColumnName(field.getColumnName());
                        genTableField.setColumnComment(field.getComment());
                        genTableField.setJavaColumnName(field.getCapitalName());
                        genTableField.setJavaColumnNamePath(field.getPropertyName());
                        genTableField.setIsTableKey(field.isKeyFlag());
                        genTableField.setIsLogicDeleteField(field.isLogicDeleteField());
                        genTableField.setIsFill(StringUtils.isNotBlank(field.getFill()));
                        genTableField.setFill(StringUtils.isNotBlank(field.getFill())?field.getFill():"");
                        genTableField.setJavaType(field.getPropertyType());
                        genTableField.setTsType(GenUtils.ConvertTsType(field.getPropertyType())); // 传入Java Type set方法中自动转换为Ts类型
                        genTableField.setIsRequired(!field.getMetaInfo().isNullable());
                        String defaultValue = field.getMetaInfo().getDefaultValue();
                        genTableField.setDefaultValue(StringUtils.isNotBlank(defaultValue)?defaultValue:"");
                        genTableField.setColumnMaxLength(field.getMetaInfo().getLength());
                        genTableField.setJdbcType(field.getMetaInfo().getJdbcType());
                        genTableFields.add(genTableField);
                        // 获得主键
                        if(field.isKeyFlag()){
                            table.put("tableKey",field.getColumnName());
                            table.put("tableKeyComment",field.getComment());
                            table.put("tableKeyType",field.getColumnType()); // 全大写
                            java.put("tableKey",field.getCapitalName());
                            java.put("tableKeyPath",field.getPropertyName());
                            java.put("tableKeyType",field.getPropertyType()); // 首字母大写
                            java.put("tableKeyTsType", GenUtils.ConvertTsType(field.getPropertyType()));
                        }
                    });
                    objectMap.put("genTableFields1",genTableFields);
                    objectMap.put("project1",project);
                    objectMap.put("table1",table);
                    objectMap.put("java1",java);
                });
    }
  1. 代码解释

5.1 由beforeOutputFile中可知是一个循环,tableInfo是当前生成数据库表的一个信息实体,ObjectMap是自定义变量的map映射

5.2 由此,可以得出,若想要增加一个自定义变量,只需在objectMap中添加即可

5.3 若满足不了您的定制需求,可自行修改代码

使用模板变量

以 project1.packageName 为例子,在VM模板文件中使用 ${project1.packageName} 即可
最近更新:: 2026/1/9 17:44
Contributors: DuYiFan
Prev
快速开始
Next
在线预览