# ORM **Repository Path**: feiboo/orm ## Basic Information - **Project Name**: ORM - **Description**: Lib.Data 是一个轻量级、高性能的多数据库 . NET9.0 开源 ORM 框架,支持 MSSQL、MySQL、MariaDB、PostgreSQL、SQLite、Oracle、ClickHouse、Access、Excel、Text 等多种数据库,插件式驱动管理,核心设计围绕 零反射开销 、 零数据复制 和 极致性能优化 。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-07 - **Last Updated**: 2026-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ORM #### 一、介绍 Lib.Data 是一个轻量级、高性能的多数据库 . NET9.0 开源 ORM 框架,支持 MSSQL、MySQL、MariaDB、PostgreSQL、SQLite、Oracle、ClickHouse、Access、Excel、Text 等多种数据库,插件式数据库驱动,核心设计围绕 零反射开销 、 零数据复制 和 极致性能优化 。 解决方案里的项目都是来至 Lib 库,ORM 项目现只专用于 Insertable 测试。 #### 二、可扩展性优点 ##### 2.1 插件式数据库驱动 优点: - ✅ 热插拔驱动 :按需引入 - ✅ 统一接口 :DbProviderFactory 抽象 - ✅ 易于扩展 :新增数据库只需新增 Provider ##### 2.2 自定义 SQL 模板 优点: - ✅ 完全可定制 :自定义 SQL 语句 - ✅ 适配特殊数据库 :兼容非标准 SQL - ✅ 灵活配置 :JSON 配置热更新 #### 三、功能模块概览(同步/异步双模式支持) - ✅ ExecuteNonQuery 执行新增/删除/更新SQL - ✅ ExecuteScalar 执行查询返回单值 - ✅ ExecuteReader 执行查询返回 DataReader - ✅ ExecuteDataTable 执行查询返回 DataTable - ✅ Insert 扩展方法 Insertable 链式调用入口 - ✅ 日志与优化 SQL执行日志、性能监控 - ✅ 参数处理 SQL参数化查询支持 - ✅ 数据转换 DataReader/DataTable→实体 # Insertable(基本功能已完成,其余功能开发中) #### 一、介绍 Insertable 是一个高性能的泛型批量插入构建器,专为百万级数据插入场景设计,在架构设计和性能优化方面具有多项核心优势。 #### 二、核心架构设计优点 ##### 2.1 完整的三层缓存体系 缓存层 | 组件 | 说明 第一层 | ObjectAccessor 静态缓存 | 全局按类型缓存 PropertyAccessor 实例 第二层 | PropertyAccessor 实例缓存 | 预编译所有属性访问器(Func) 第三层 | PropertyAccessor.GenericAccessors 泛型缓存 | 带 T 类型键的泛型访问器缓存 ##### 2.2 表达式树预编译技术 优点: - ✅ 运行时零反射 :反射只在初始化时执行一次 - ✅ 委托直接调用 :比反射快 10-100 倍 - ✅ 预编译优化 :表达式树编译为高效 IL 代码 ##### 2.3 零数据复制设计 优点: - ✅ T[] 数组 :直接引用,无复制 - ✅ IList 列表 :直接引用,无复制 - ✅ 内存效率 :百万级数据零复制,性能最优 ##### 2.4 委托模式优化 优点: - ✅ 消除循环内判断 :根据数据源类型选择不同委托 - ✅ 代码复用 :公共逻辑提取一次 - ✅ 性能最优 :零 null 检查开销 #### 三、内存优化技术 ##### 3.1 StringBuilder 对象池 优点: - ✅ 减少 GC 压力 :复用 StringBuilder 对象 - ✅ 线程安全 :ConcurrentQueue 保证并发安全 - ✅ 限制池大小 :防止内存泄漏(最大 32 个) ##### 3.2 批量分页处理 优点: - ✅ 默认 1000 条/批 :平衡性能和内存 - ✅ 可配置批次大小 :根据数据量调整 - ✅ 避免 SQL 过长 :分批执行更稳定 #### 四、API 设计优点 ##### 4.1 链式调用设计 优点: - ✅ 流畅语法 :代码简洁易读 - ✅ 类型安全 :表达式式字段选择 - ✅ 灵活配置 :白名单/黑名单字段 ##### 4.2 完整的数据源支持 - `Insert(T Entity) 单条插入 - `Insert(T[] Entitys) 数组批量插入 - `Insert(IList Entitys) 列表批量插入 - `Insert(IList) 字典批量插入 - `Insert(DataTable) DataTable批量插入 #### 五、多数据库兼容性 ##### 5.1 动态 SQL 模板 优点: - ✅ 零配置 :自动适配数据库类型 - ✅ 三种 SQL 模式 :Splice/Array/Entire - ✅ 占位符支持 :Access/Excel 使用 ? ##### 5.2 统一参数化查询 优点: - ✅ 防止 SQL 注入 :默认启用参数化模式 - ✅ 数据库无关 :统一 ADO.NET 接口 - ✅ 事务支持 :内置事务对象 #### 六、性能测试结果(百万级数据性能测试报告) ##### 6.1 测试环境与执行结果(在真实数据库场景中,数据库IO是瓶颈) | 数据量 | 执行时间 | 处理速度 | |--------|---------| | 100,000 行 | 81.06 ms | 1,233,724 行/秒 | | 500,000 行 | 246.26 ms | 2,030,414 行/秒 | | 1,000,000 行 | 490.25 ms | 2,039,794 行/秒 | ##### 6.2 执行流程分析: - 1. 初始化阶段:仅执行零反射属性访问器预编译,约1-2ms - 2. 批次处理:默认1000条/批,共1000批次 - 3. SQL构建:使用委托模式,每个批次一次性生成参数和SQL子句 - 4. 数据库执行:1000次ExecuteNonQuery调用 #### 七、安全性优点 ##### 7.1 参数化查询防注入 优点: - ✅ 完全防 SQL 注入 :参数值与 SQL 分离 - ✅ 数据库无关 :统一参数化格式 - ✅ 性能优化 :参数化查询可复用执行计划 ##### 7.2 字段白名单/黑名单 优点: - ✅ 防止误操作 :只允许指定字段 - ✅ 安全过滤 :排除敏感字段(如密码) - ✅ 灵活配置 :两种方式任选 #### 八、代码质量优点 ##### 8.1 完整 XML 注释 优点: - ✅ 智能提示 :IDE 完整 API 文档 - ✅ 代码可读 :注释清晰详尽 - ✅ 易于维护 :新成员快速上手 ##### 8.2 统一的编码规范 #### 九、总结 ##### ✅ 性能极致 - 百万级数据 2,039,794 行/秒 - 零数据复制、零反射、零装箱(仅 ADO.NET 框架限制) - 表达式树预编译 + 三层缓存体系 ##### ✅ 安全可靠 - 参数化查询防 SQL 注入 - 字段白名单/黑名单保护 - 统一错误码机制 ##### ✅ 易用性强 - 链式调用 API - 类型安全表达式 - 完整 XML 注释 ##### ✅ 兼容性好 - 支持 10+ 种数据库 - 自动适配 SQL 模板 - 插件式驱动管理 ##### ✅ 代码质量 - 命名规范、结构清晰 - 完整异常处理 - 易于维护扩展