# code-generator-starter **Repository Path**: wip/code-generator-starter ## Basic Information - **Project Name**: code-generator-starter - **Description**: 项目特点: 1.支持模板开发 2.支持整体工程快速生成 3.具有高度可扩展性(可自定义模板) 4.只需要简单的配置就可以生成代码 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-03-21 - **Last Updated**: 2022-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 代码生成器 ### 项目介绍 >该项目借鉴了codesmith的设计思想,以易用 通用 好用 作为实现目标,让开发者以最低的成本批量生成代码. > >项目特点: >- 支持模板开发 >- 支持整体工程快速生成 >- 具有高度可扩展性 >- 只需要简单的配置就可以生成代码 > >项目功能: >- 读取数据库元数据,一步获取数据库表结构(支持MySQL和Oracle数据库) >- 使用IO流读取模板文件,遍历模板文件替换占位符,生成新文件 > ### 读取数据库 >操作数据库的类DatabaseUtil(支持mysql和oracle数据库),主要包括如下功能: >- 查看所有数据库列表 -> List showDatabases(); >- 查看指定数据库 -> Database getDatabase(String dbName); >- 查看指定数据库下所有表 -> List showTables(String dbName); >- 查看指定数据库的所有表结构 -> List getTables(String dbName); 只需简单的配置,即可一步生成数据库表结构,像下面这样 ``` #mysql数据库 code: generator: database: database-type: mysql url: jdbc:mysql://localhost:3306 username: root password: root #oracle数据库 #code: # generator: # database: # database-type: oracle # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # username: boot # password: boot ``` 然后在你需要使用的地方直接注入就可以使用了 ``` @Autowired private DatabaseUtil databaseUtil; ``` ### 代码生成 - 项目信息可以自由配置 ``` code: generator: project: package-name: com.wisely.cloud_demo author: 姚勇 group-id: com.wisely artifact-id: cloud_demo version: 1.0.0 name: cloud_demo comment: 微服务项目演示 ``` - 模板位置和代码生成位置可以自由配置 ``` code: generator: path: code-generator-path: D:\workspace base-template-path: D:\workspace\code-generator-spring-boot-starter\src\main\resources\codeTemplate\springboot+mybatis-plus+druid #可省略 project-template-path: D:\workspace\code-generator-spring-boot-starter\src\main\resources\codeTemplate\springboot+mybatis-plus+druid\projectTemplate table-template-path: D:\workspace\code-generator-spring-boot-starter\src\main\resources\codeTemplate\springboot+mybatis-plus+druid\tableTemplate column-template-path: D:\workspace\code-generator-spring-boot-starter\src\main\resources\codeTemplate\springboot+mybatis-plus+druid\columnTemplate package-path: com/wisely/cloud_demo hierarchy-path: path_1: com path_2: wisely path_3: cloud_demo ``` 使用也是非常的简单 ``` @Autowired private CodeUtil codeUtil; @Autowired private DatabaseUtil databaseUtil; @Test public void createCode() throws SQLException { codeUtil.createCode(databaseUtil.getDatabase("test")); } ``` ### 模板说明 什么是模板 >模板是包含替换符的一组文件集合,代码生成器根据模板和数据库结构模型来生成代码 >通过模板,代码生成器可以生成各种框架结构的代码,甚至是其他语言的代码,比如C#, php,只要写出对应的模板,就可以生成 模板类型 - 工程模板 > 工程模板是用来生成整体工程主体部分的模板,可以根据一个demo工程修改创建 - 表级模板 > 表级模板是用来生成与表的数据相关的内容部分的模板,其内容将根据表的列表循环产生.如果我们需要在某个文件中显示与表相关的数据,可以引用表级模板 - 列级模板 >列级模板是用来生成与列的数据相关的内容部分的模板,其内容根据列的列表循环产生.如果我们需要在某个文件中显示与列相关的数据,可以引用列级模板. >列级模板特殊命名 >+ 文件名含有.key 是只循环主键 >+ 文件名含有.nokey 只循环非主键 >+ 文件名含有.String 只循环字符串类型 >+ 文件名含有.Boolean 只循环布尔类型 >+ 文件名含有.DateTime 只循环日期时间类型 内置替换符 - 工程模板内置替换符 ``` [project] 项目名称(英文) [projectComment] 项目中文名称 [package] 包名 com.wisely.demo [package_path] 包目录,根据包名产生 com/wisely/demo [path_x] 目录, x代表目录级数,从1开始,不需要设置,值根据package产生.比如: path_1: com path_2:wisely path_3 :demo [author] 作者 [databaseType] 数据库类型 [dbName] 数据库名称 [url] 数据库url [username] 数据库用户名 [password] 数据库密码 ``` - 表级模板内置替换符 ``` [table] 表名称(小写开头) [Table] 首字母大写的表名称 [tableComment] 表含义 [key] 主键名称 ``` - 列级模板内置替换符 ``` [column] 列名称(小写开头) [Column] 首字母大写的列名称 [type] java字段类型 [dbType] 数据库字段类型 [columnComment] 列含义 ``` 更多占位符请参考:com.yaoyong.codegenerator.constant.Placeholder.java ### 占位符文件 ``` /** * 尖括号 */ public static final String ANGLE_BRACKET_LEFT = "<"; public static final String ANGLE_BRACKET_RIGHT = ">"; /** * 方括号 */ public static final String SQUARE_BRACKETS_LEFT = "["; public static final String SQUARE_BRACKETS_RIGHT = "]"; /** * 工程模板内置替换符 *

* [project] 项目名称(英文) * [projectComment] 项目中文名称 * [package] 包名 com.wisely.demo * [package_path] 全部目录,根据包名产生 com/wisely/demo * [author] 作者 * [path_x] 目录 ,x代表目录级数,从1开始,不需要设置,值根据package产生。比如: path_1: com path_2:wisely path_3 :demo */ public static final String PROJECT = "[project]"; public static final String PROJECT_COMMENT = "[projectComment]"; public static final String PROJECT_PACKAGE = "[package]"; public static final String PROJECT_PACKAGE_PATH = "[package_path]"; public static final String PROJECT_AUTHOR = "[author]"; public static final String[] PROJECT_HIERARCHY_PATH = {"[path_1]", "[path_2]", "[path_3]", "[path_4]", "[path_5]"}; /** * 数据库内置替换符 *

* [databaseType] 数据库类型(mysql,oracle) * [driverClassName] 数据库驱动 * [url] 数据库url * [dbName] 数据库名称 * [username] 数据库用户名 * [password] 数据库密码 */ public static final String DB_TYPE = "[databaseType]"; public static final String DB_DRIVER = "[driverClassName]"; public static final String DB_URL = "[url]"; public static final String DB_NAME = "[dbName]"; public static final String DB_USERNAME = "[username]"; public static final String DB_PASSWORD = "[password]"; /** * 表级模板内置替换符 *

* [table] 表名称(小写开头) * [Table] 首字母大写的表名称 * [tableComment] 表含义 * [key] 主键名称 */ public static final String TABLE_LOWER = "[table]"; public static final String TABLE_UPPER = "[Table]"; public static final String TABLE_COMMENT = "[tableComment]"; public static final String TABLE_KEY = "[key]"; /** * 列级模板内置替换符 *

* [column] 列名称(小写开头) * [Column] 首字母大写的列名称 * [type] java类中类型 * [dbType] 数据库中类型 * [columnComment] 列含义 */ public static final String COLUMN_LOWER = "[column]"; public static final String COLUMN_UPPER = "[Column]"; public static final String COLUMN_TYPE = "[type]"; public static final String COLUMN_DB_TYPE = "[dbType]"; public static final String COLUMN_COMMENT = "[columnComment]"; ```