# SmartSql **Repository Path**: jempson/SmartSql ## Basic Information - **Project Name**: SmartSql - **Description**: SmartSql = Dapper + MyBatis + Cache(Memory | Redis) + ZooKeeper + R/W Splitting + ...... - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 17 - **Created**: 2017-08-10 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SmartSql - [Documentation](https://doc.smartsql.net/) ## 0. Why ? - Embrace the cross platform. DotNet Core, it's time! - Based on Dapper, no more wheels are repeated. Dapper performance you know! ## 1. So SmartSql - TargetFramework: .NETStandard,Version=v1.4 - SmartSql = Dapper + MyBatis + Cache(Memory | Redis) + ZooKeeper + R/W Splitting + ...... ## 2. 主要特性 (√ 为已完成,未打 √ 为计划特性) - 1 ORM - 1.1 Sync √ - 1.2 Async √ - 2 XmlConfig & XmlStatement -> Sql √ - 2.1 SmartSqlMapConfig & SmartSqlMap √ (是的,你猜对了,和MyBatis一样,通过XML配置分离SQL。) - 2.2 Config Hot Update ->ConfigWatcher & Reload √ (配置文件热更新:当你需要修改Sql的时候,直接修改SqlMap配置文件,保存即可。) - 3 读写分离 √ - 3.1 读写分离 √ - 3.2 多读库 权重筛选 √ (配置多读库,根据读库权重选举读库) - 3.3 读库故障检测,剔除 - 4 Logging √ - 4.1 NLog √ (当你需要跟踪调试的时候一切都是那么一目了然) - 5 DAO - 5.1 DAO √ - 5.2 DAO Tool √ - 5.2.1 Template Xml & Entity & DAO √ - 5.2.2 Generate Tool √ - 6 Query Cache √ - 6.1 SmartSql.Cache.Memory √ - 6.1.1 Fifo √ - 6.1.2 Lru √ - 6.2 SmartSql.Cache.Redis √ - 6.3 缓存事务一致性 √ - 7 分布式配置插件 - 7.1 IConfigLoader √ (配置文件加载器) - 7.2 LocalFileConfigLoader √ (本地文件配置加载器) - 7.2.1 Load SmartSqlMapSource Xml √ - 7.3.1 Load SmartSqlMapSource Directory √ - 7.3 SmartSql.ZooKeeperConfig √ (ZooKeeper 分布式配置文件加载器) ## 3. Configuration ### 3.1 SmartSqlMapConfig ``` xml ``` ### 3.2 Logging ``` xml ``` ### 3.3 SmartSqlMap ``` xml Where 1=1 INSERT INTO T_Test (Name) VALUES (@Name) ;Select Scope_Identity(); Delete T_Test Where Id=@Id UPDATE T_Test SET Name = @Name Where Id=@Id SELECT T.* From T_Test T With(NoLock) Order By T.Id Desc Select TT.* From (Select ROW_NUMBER() Over(Order By T.Id Desc) Row_Index,T.* From T_Test T With(NoLock) ) TT Where TT.Row_Index Between ((@PageIndex-1)*@PageSize+1) And (@PageIndex*@PageSize) Select Count(1) From T_Test T With(NoLock) Select Top 1 T.* From T_Test T With(NoLock) Where 1=1 T.Id=@Id Select Count(1) From T_Test T With(NoLock) ``` ## Install (NuGet) ``` Install-Package SmartSql ``` ## Codes ### Query ``` CSharp ISmartSqlMapper SqlMapper = new SmartSqlMapper(); SqlMapper.Query(new RequestContext { Scope = "T_Test", SqlId = "GetList", Request = new { Ids = new long[] { 1, 2, 3, 4 } } }); ``` ### Transaction ``` CSharp try { sqlMap.BeginTransaction(); sqlMap.Execute(new RequestContext { Scope = "T_Test", SqlId = "Add", Request = new T_Test { } }); sqlMap.Execute(new RequestContext { Scope = "T_Test", SqlId = "Update", Request = new T_Test { } }); sqlMap.CommitTransaction(); } catch (Exception ex) { sqlMap.RollbackTransaction(); throw ex; } ``` ## 技术交流 - QQ群:604762592