ORM数据库访问技术()

(请在电脑上打开页面,会获取更好的阅读效果)

 

常见的ORM技术(比如:Entity FrameworkDapperSqlSugarNHibernate,等),它们不是在做Sql语句的程序化变种,就是在做Sql语句的面向对象化。虽然有“逻辑较清晰”、“统一异质数据库Sql语法差异”的优势,但它们的缺点也显而易见:

(1)     把简单的Sql语句复杂化、不伦不类

(2)     速度慢、性能下降严重

(3)     有时功能不全,有时又有未知错误+不停发补丁

(4)     非标的各家自定义语法、且一些自定义破坏了原生.Net/C#以及Sql语言的协调性

(5)     难以大规模统一应用

 

本文要介绍的主角-DeveloperSharp框架中的ORM数据库访问技术(),则提供了一种基于原生Sql操作为核心的解决方案,也巧妙的规避了上述各种缺点。(注:未来视必要也能发展成面向对象程序化)

该方案几乎只使用了一个方法/函数,却实现了几乎所有的数据操作功能。它已成功应用到了人工智能、产业互联网、智慧医疗、等多个大型项目上。

 

此套ORM技术在IDataAccess接口中提供。

IDataAccess所在的命名空间是:DeveloperSharp.Framework.QueryEngine

它主要提供了如下四大功能:

(1)     执行Sql语句

(2)     执行Sp存储过程

(3)     创建参数(输入/输出/返回)

(4)     事务

它初始化的代码如下:

using DeveloperSharp.Framework.QueryEngine;

--------------------------

 

   DatabaseInfo DIF;

   DIF.DatabaseType = DatabaseType.SQLServer; //设置数据库类型

   DIF.ConnectionString = "Server=localhost;Database=YZZ;Uid=sa;Pwd=123";

   IDataAccess IDA = DataAccessFactory.Create(DIF);

注意:通过对DatabaseType属性的设定,提供了对各不同种类数据库的支持(包括:MySqlOraclePostgreSQLSqlServerSqliteFirebird、达梦、以及人大金仓KingbaseES、神舟通用, 南大通用, 翰高, Access、等)

 

【示例1:查询】

下面,首先直接给出一个“查询多数据+选出单数据+参数”的使用示例,代码如下:

   //查询多数据

   var Students1 = IDA.SqlExecute<stu>("select * from t_Student");

 

   //查询多数据(带参数)

   var IdMin = IDA.CreateParameterInput("IdMin", DbType.Int32, 2);

 var LikeName = IDA.CreateParameterInput("LikeName", DbType.String, 50, "%%");

   var Students2 = IDA.SqlExecute<stu>("select * from t_Student where Id>@IdMin and Name like @LikeName", IdMin, LikeName);

   //另一种写法

   var Students3 = IDA.SqlExecute<stu>("select * from t_Student").Where(t => t.Id > 2 && t.Name.Contains(""));

 

   //选出单数据

   var OneStudent = Students2.FirstOrDefault();

其中stu实体类代码如下形式:

    public class stu

{

        public int Id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

}

//此实体类中的IdNameAge属性名,要与数据表中的IdNameAge字段名对应

注意:创建参数时使用DbType类型,就是为了能在不同类型数据库(SqlServerMySqlOracle、等)之间透明切换!

 

 

【示例2:分页】

承接上面“示例1”的代码,若我们要对Students1Students2进行分页操作(比如:每页20条,取出第5页),相关代码如下:

using DeveloperSharp.Extension;//调用“分页功能”需要引用此命名空间

--------------------------

 

   var Page1 = Students1.PagePartition(20, 5);

   var Page2 = Students2.PagePartition(20, 5);

 

   //一气呵成的写法

   var Page3 = IDA.SqlExecute<stu>("select * from t_Student").PagePartition(20, 5);

 

 

【示例3//

前面谈完查询,我们接下来谈谈//的使用方式,下面是一个修改数据+参数+事务的使用示例:

   try

   {

       //开启事务

       IDA.TransactionBegin();

 

       //修改数据(多语句)

       int affectedRows1 = IDA.SqlExecute("insert into t_Student(Name,Age)values('ww','96');update t_Student set Age=100 where Id=1006");

 

       //修改数据(带参数)

       var NewAge = IDA.CreateParameterInput("NewAge", DbType.Int32, 200);

       var NewName = IDA.CreateParameterInput("NewName", DbType.String, 50, "孙悟空");

       int affectedRows2 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@NewName,@NewAge)", NewName, NewAge);

 

       //完成事务

       IDA.TransactionCommit();

   }

   catch

   {

       //回滚事务

       IDA.TransactionRollBack();

   }

 

 

【示例4其它

最后,我们给出一个“聚合函数+输出参数”的使用示例,代码如下:

   var IdMax = IDA.CreateParameterInput("IdMax", DbType.Int32, 20);

   var TotalCount = IDA.CreateParameterOutput("TotalCount", DbType.Int32);//此项为输出参数

   var Students3 = IDA.SqlExecute<stu>("select @TotalCount=count(*) from t_Student where Id<@IdMax", TotalCount, IdMax);

   int tc = (int)TotalCount.Value;

 

灵活学习+使用以上4个示例,就能满足几乎所有的数据操作需求。

 

另外,你有没有发现,上述所有的数据操作几乎只用了一个方法来实现:SqlExecute/ SqlExecute<T>

 

 

IDataAccess内功能方法详细说明(辅助参考):

SqlExecute<T>

声明:IEnumerable<T> SqlExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()

用途:执行Sql语句(Select)

参数:(1string  cmdText                --  Sql语句

         2params IDataParameter[] Params --  参数组

返回:IEnumerable<T> --  多数据结果集

 

 

SqlExecute

声明:int SqlExecute(string cmdText, params IDataParameter[] Params)

用途:执行Sql语句(Insert/Update/Delete)

参数:(1string  cmdText                --  Sql语句

         2params IDataParameter[] Params --  参数组

返回:int --  受影响的行数

 

SpExecute<T>

声明:IEnumerable<T> SpExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()

用途:执行Sp存储过程(Select)

参数:(1string  cmdText                --  Sp存储过程名

         2params IDataParameter[] Params --  参数组

返回:IEnumerable<T> --  多数据结果集

 

SpExecute

声明:int SpExecute(string cmdText, params IDataParameter[] Params)

用途:执行Sp存储过程(Insert/Update/Delete)

参数:(1string  cmdText                --  Sp存储过程名

         2params IDataParameter[] Params --  参数组

返回:int --  受影响的行数

 

 

 

 

推荐指数★★★★★

优势1:速度快、性能高

优势2:永久免费、商用免费

优势3:无任何时间/次数限制,放心使用

优势4:免费咨询服务