SmartCode 代码生成工具完全指南:从入门到精通
【免费下载链接】SmartCodeSmartCode = IDataSource -> IBuildTask -> IOutput => Build Everything!!!项目地址: https://gitcode.com/gh_mirrors/smar/SmartCode
1. 核心功能速览:3分钟了解SmartCode
SmartCode是一款基于.NET Core的模板驱动型代码生成工具,通过"数据源→构建任务→输出"的流程实现全自动化代码生成。其核心价值在于将开发者从重复编码工作中解放出来,专注于业务逻辑实现。
1.1 四大核心能力🔍
- 多数据源支持:兼容MySQL、PostgreSQL、SQL Server等主流关系型数据库
- 灵活模板引擎:内置Razor和Handlebars两种模板引擎,支持自定义模板
- 全流程自动化:从代码生成到项目构建的完整自动化流程
- 高度可扩展:插件化架构设计,支持自定义数据源、构建任务和输出方式
1.2 支持的输出类型
- 后端代码:C#/.NET Core、Java/Spring Boot项目结构
- 数据访问层:SmartSql配置文件、MyBatis映射文件
- API接口:RESTful风格控制器、请求/响应模型
- ETL任务:数据抽取、转换、加载脚本
💡专家提示:SmartCode最适合企业级应用的标准化代码生成,尤其在微服务架构中能显著提升团队协作效率。建议先从基础模板入手,熟悉后再定制符合团队规范的专属模板。
2. 快速上手流程:5分钟启动你的第一个代码生成项目
2.1 环境准备
✅步骤1:安装必要依赖
# 克隆项目仓库 git clone https://gitcode.com/gh_mirrors/smar/SmartCode cd SmartCode # 还原依赖包 dotnet restore✅步骤2:构建项目
dotnet build -c Release2.2 三分钟启动指南
✅步骤1:配置数据源在项目根目录创建或修改SmartCode.yml文件,配置数据库连接信息:
Module: SmartSql.Starter DataSource: Name: Db Provider: SqlServer ConnectionString: "Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True"✅步骤2:执行生成命令
cd src/SmartCode.CLI dotnet run -- --config ../../../SmartCode.yml✅步骤3:查看生成结果生成的代码默认输出到E:/work/SmartSql-Starter目录(可在配置文件中修改)
💡专家提示:首次使用建议从官方提供的示例配置文件开始(位于doc/SmartCode.yml),根据实际需求逐步调整参数。命令行中添加--debug参数可查看详细生成过程,有助于排查配置问题。
3. 深度配置指南:掌握高级定制技巧
3.1 配置文件结构解析
SmartCode的配置文件采用YAML格式,主要包含以下几个核心部分:
| 配置节点 | 作用 | 必选 |
|---|---|---|
| Module | 项目模块名称 | 是 |
| DataSource | 数据源配置 | 是 |
| Language | 目标语言 | 否,默认C# |
| TemplateEngine | 模板引擎类型 | 否,默认Razor |
| Output | 输出配置 | 是 |
| Build | 构建任务配置 | 否 |
3.2 常见场景配置模板
场景1:生成C#实体类
Module: MyProject.Entity DataSource: Name: Db Provider: MySql ConnectionString: "server=localhost;database=mydb;uid=root;pwd=123456;" Output: Type: File Path: ../MyProject.Entity/Entities Build: Type: Table Parameters: Tables: ["user", "order"]场景2:生成Java Spring Boot项目
Module: MySpringProject Language: Java TemplateEngine: Razor DataSource: Name: Db Provider: PostgreSql ConnectionString: "Host=localhost;Database=mydb;Username=postgres;Password=123456" Output: Type: File Path: ../MySpringProject Build: Type: Project Parameters: Template: "Spring-Boot"3.3 命名转换器配置
SmartCode提供多种命名转换策略,可在配置中指定:
NamingConverter: Tokenizer: Type: Delimiter Parameters: Delimiter: "_" Converter: Type: PascalCase支持的转换器类型:
CamelCase:驼峰式命名(如userName)PascalCase:帕斯卡命名(如UserName)Delimiter:分隔符命名(如user_name)
💡专家提示:配置文件中的路径支持相对路径和绝对路径,建议使用相对路径以便团队协作。通过Parameters节点可以为不同构建任务传递自定义参数,实现更灵活的代码生成逻辑。
4. 扩展开发详解:打造专属代码生成能力
4.1 自定义构建任务
创建自定义构建任务需要实现IBuildTask接口:
public class MyCustomBuildTask : IBuildTask { public async Task Build(BuildContext context) { // 自定义构建逻辑 var table = context.GetTable(); var entityCode = GenerateEntityCode(table); context.AddOutputFile( path: Path.Combine(context.Output.Path, $"{table.Name}.cs"), content: entityCode ); } private string GenerateEntityCode(Table table) { // 生成实体类代码 // ... } }4.2 实现自定义数据源
如果需要从非数据库源获取数据,可以实现IDataSource接口:
public class JsonFileDataSource : IDataSource { public async Task<DataSourceResult> GetData(DataSourceContext context) { var jsonPath = context.Parameters["JsonPath"]; var jsonContent = await File.ReadAllTextAsync(jsonPath); var data = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonContent); return new DataSourceResult { Data = data }; } }4.3 开发自定义模板
以Razor模板为例,创建自定义实体类模板:
@model Table using System; using System.ComponentModel.DataAnnotations; namespace @Model.Namespace; public class @Model.Name { @foreach (var column in Model.Columns) { [Display(Name = "@column.Description")] public @column.CSharpType @column.Name { get; set; } } }💡专家提示:扩展开发时建议先查看SmartCode.Generator项目中的现有实现,大多数场景下可以通过继承抽象类AbstractBuildTask来减少重复代码。所有自定义组件需在配置文件的Plugins节点中注册才能生效。
5. 排错指南:解决常见问题
5.1 连接数据库失败
- 检查连接字符串:确认数据库地址、端口、用户名和密码是否正确
- 测试网络连通性:使用
telnet或ping命令测试数据库服务器可达性 - 验证数据库权限:确保数据库用户具有足够的权限(至少需要SELECT权限)
5.2 模板渲染错误
- 检查模板语法:Razor模板需遵循C#语法规则
- 查看上下文数据:使用
@Dump(context)在模板中输出上下文数据进行调试 - 检查数据类型:确保模板中访问的属性在数据源中存在
5.3 生成文件为空
- 检查数据源返回:确认数据源是否返回了预期数据
- 验证过滤条件:检查TableFilter配置是否过滤了所有表
- 查看日志输出:添加
--verbose参数运行命令查看详细日志
注意:所有配置文件修改后需重新运行生成命令才能生效,修改模板文件则无需重新运行,下次生成会自动应用最新模板。
6. 性能优化建议:提升大规模项目生成效率
6.1 增量生成配置
通过配置只生成变更文件,大幅提升重复生成效率:
Build: Type: Table Parameters: IncrementalBuild: true IncrementalBuildColumn: "ModifyTime"6.2 并行生成设置
对于包含多个模块的大型项目,启用并行生成:
Parallel: Enabled: true MaxDegreeOfParallelism: 46.3 模板缓存策略
启用模板缓存减少重复编译开销:
TemplateEngine: Type: Razor Parameters: CacheEnabled: true💡专家提示:对于包含数百张表的大型数据库,建议使用TableFilter配置只生成需要的表,并结合增量生成功能。在CI/CD流程中集成时,可将生成结果缓存,仅当模板或配置变更时才重新生成。
7. 高级应用场景
7.1 与CI/CD流程集成
在Jenkins或GitHub Actions中集成SmartCode:
# GitHub Actions配置示例 jobs: generate-code: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup .NET uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Generate code run: | cd src/SmartCode.CLI dotnet run -- --config ../../../SmartCode.yml - name: Commit generated code uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "Auto-generate code" file_pattern: "**/*.cs"7.2 多数据库类型支持
SmartCode支持同时连接多个不同类型的数据库:
DataSources: - Name: MySqlDb Provider: MySql ConnectionString: "server=localhost;database=mysqldb;uid=root;pwd=123456;" - Name: PgDb Provider: PostgreSql ConnectionString: "Host=localhost;Database=pgdb;Username=postgres;Password=123456"💡专家提示:高级用户可以开发自定义插件将SmartCode与ORM框架、API文档工具等集成,构建完整的开发流水线。官方GitHub仓库提供了丰富的插件示例可供参考。
8. 总结与资源
SmartCode通过灵活的配置和强大的扩展能力,为开发者提供了一个高效的代码生成解决方案。无论是小型项目还是大型企业应用,都能通过SmartCode显著提升开发效率,保证代码质量的一致性。
学习资源
- 官方文档:doc/SmartCode.ETL.md
- 模板示例:src/SmartCode.Generator/RazorTemplates
- 配置示例:doc/SmartCode.yml
通过本文档的指导,您应该已经掌握了SmartCode的核心使用方法和高级定制技巧。随着使用的深入,您会发现更多提升开发效率的技巧和最佳实践。
💡专家提示:定期查看项目更新日志,SmartCode团队持续推出新功能和改进。参与社区讨论可以获取更多实际应用场景的解决方案和最佳实践。
【免费下载链接】SmartCodeSmartCode = IDataSource -> IBuildTask -> IOutput => Build Everything!!!项目地址: https://gitcode.com/gh_mirrors/smar/SmartCode
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考