从零上手SmartSql:高效ORM框架的配置与实战指南
SmartSql是一款基于.NET Core的ORM框架,融合了MyBatis的SQL管理思想与现代.NET技术栈特性,提供缓存管理、读写分离、动态仓库等企业级功能。作为连接应用程序与数据库的桥梁,它通过XML配置文件集中管理SQL语句,既保留了SQL的灵活性,又简化了数据访问层的开发流程,帮助开发者构建高效、可维护的数据库操作逻辑。
3步完成环境部署
准备开发环境
SmartSql的运行依赖于.NET Core生态,确保系统已安装以下组件:
- .NET Core SDK 3.1或更高版本(推荐5.0+以获得更好性能)
- 任意代码编辑器(Visual Studio 2022、VS Code或Rider)
- 数据库环境(支持SQL Server、MySQL、PostgreSQL等主流数据库)
🛠️ 小贴士:通过
dotnet --version命令可验证SDK安装情况,出现版本号即表示环境就绪。
获取项目代码
打开终端工具,执行以下命令克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/smar/SmartSql
进入项目目录后,可看到完整的解决方案结构,包含核心库、扩展组件和示例代码。其中src/SmartSql目录包含框架核心代码,sample目录提供了ASP.NET Core集成示例。
配置与构建项目
- 使用代码编辑器打开
SmartSql.sln解决方案文件 - 右键点击解决方案,选择"还原NuGet包"以安装依赖
- 执行"生成解决方案"命令(快捷键Ctrl+Shift+B)
📌 注意事项:若构建失败,检查是否安装了正确版本的.NET SDK,或尝试清理解决方案后重新构建。
5分钟实现数据库操作
基础配置文件
SmartSql通过XML文件管理数据库连接和SQL映射,典型的配置文件结构如下:
<SmartSqlMapConfig>
<Database>
<DbProvider Name="SqlServer"/>
<WriteDataSource ConnectionString="Server=.;Database=TestDB;Trusted_Connection=True"/>
</Database>
<SqlMaps>
<SqlMap Path="Maps" Type="Directory"/>
</SqlMaps>
</SmartSqlMapConfig>
在sample/SmartSql.Sample.AspNetCore项目中可找到完整配置示例,根据实际数据库类型修改DbProvider和ConnectionString节点。
编写SQL映射文件
在Maps目录下创建实体对应的XML文件(如User.xml),定义CRUD操作:
<SqlMap Scope="User">
<Statement Id="Insert">
INSERT INTO User (Name, Age) VALUES (@Name, @Age);
SELECT SCOPE_IDENTITY() AS Id;
</Statement>
<Statement Id="GetById">
SELECT * FROM User WHERE Id = @Id
</Statement>
</SqlMap>
执行数据库操作
通过SqlMapper对象执行定义好的SQL语句:
// 创建SmartSql实例
var smartSql = new SmartSqlBuilder()
.UseXmlConfig()
.Build();
// 插入数据
var userId = smartSql.ExecuteScalar<long>(new RequestContext
{
Scope = "User",
SqlId = "Insert",
Request = new { Name = "Test", Age = 20 }
});
// 查询数据
var user = smartSql.QuerySingle<User>(new RequestContext
{
Scope = "User",
SqlId = "GetById",
Request = new { Id = userId }
});
📚 官方文档:doc/SmartSqlMapConfig.xml包含完整配置说明,src/SmartSql/ISqlMapper.cs提供API详细定义。
高级功能应用
缓存策略配置
SmartSql支持内存缓存和Redis缓存,在SQL映射中添加缓存配置:
<Statement Id="GetById" Cache="True" CacheKey="User:Id:@Id" CacheExpire="3600">
SELECT * FROM User WHERE Id = @Id
</Statement>
通过修改配置文件中的Cache节点,可切换不同的缓存提供器,满足不同场景的性能需求。
动态SQL编写
利用SmartSql的标签系统构建动态SQL:
<Statement Id="Query">
SELECT * FROM User
<Where>
<IsNotEmpty Property="Name">AND Name LIKE CONCAT('%',@Name,'%')</IsNotEmpty>
<IsGreaterThan Property="Age">AND Age > @Age</IsGreaterThan>
</Where>
</Statement>
动态标签系统支持条件判断、循环等逻辑,减少拼接SQL字符串的工作。
读写分离实现
在配置文件中添加只读数据源,自动实现读写分离:
<ReadDataSources>
<ReadDataSource ConnectionString="Server=slave1;Database=TestDB;Trusted_Connection=True"/>
<ReadDataSource ConnectionString="Server=slave2;Database=TestDB;Trusted_Connection=True"/>
</ReadDataSources>
框架会自动将查询操作路由到只读数据源,写操作使用主数据源,提升系统整体吞吐量。
项目结构解析
SmartSql采用模块化设计,主要包含以下核心组件:
- SmartSql:框架核心,包含SQL解析、执行和结果映射
- SmartSql.DyRepository:动态仓库实现,通过接口自动生成数据访问代码
- SmartSql.Cache.Redis:Redis缓存实现
- SmartSql.Bulk:批量操作组件,支持多种数据库的批量插入
- SmartSql.TypeHandler:类型转换器,处理特殊数据类型映射
示例项目SmartSql.Sample.AspNetCore展示了如何在Web应用中集成SmartSql,包含控制器、服务层和仓储层的完整实现,可作为实际项目开发的参考模板。
🛠️ 常见问题:若遇到SQL映射文件不生效,检查文件属性是否设置为"始终复制";数据库连接失败时,优先验证连接字符串格式和数据库服务状态。
通过本文介绍的步骤,你已经掌握了SmartSql的基本使用方法。这个轻量级ORM框架既能满足简单的CRUD需求,又能应对复杂的企业级应用场景,是.NET生态中值得尝试的数据访问解决方案。更多高级特性和最佳实践,请参考项目中的测试用例和示例代码。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00