欣赏另一种Orm的设计风格:大道至简

开发 后端
了解sql的原生态编程了吗?如果你觉得繁琐的话那就来看看Orm的设计风格:大道至简!

一、使用sql及存储过程

1)使用List<Dictionary<string, MObject>>

1.使用sql ,体验原生态的感觉

  1. string sql="select * from Class where ClassName = @";  
  2. string sql2="select * from Class where DateTimem = @";  
  3. List<Dictionary<string, MObject>> mylist=db.ExecuteSqlToDictionaryList(sql,"boy'");  
  4. List<Dictionary<string, MObject>> mylist2=db.ExecuteSqlToDictionaryList(sql2,DateTime.Parse("2013-10-10 14:40:08"));  
  5. foreach(var oneClass in mylist){  
  6.                     string className=oneClass["className"].To<string>();  
  7.                     long id=oneClass["Classid"].To<long>();  
  8.                     DateTime datetimem=oneClass["datetimem"].To<DateTime>();//不用区分大小写  
  9.                     Console.WriteLine(className+"  "+id+"  "+datetimem);  

2.使用mql,智能感知带来的优雅体验

  1. var  list=db.GetDictionaryList(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0))) 

2)MQL 全面接触

2.1 MQL的标准查询

  1. var mm=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName).  
  2.  
  3. Where(ClassSet.ClassName.Contains("s").And(ClassSet.ClassID.BiggerThan(9)));  
  4.  
  5.    
  6. SELECT [Class].[ClassID],[Class].[ClassName] FROM [Class] WHERE [Class].[ClassName] LIKE @p1  AND  [Class].[ClassID]>@p2  
  7. @p1=%s%  
  8. @p2=9 

2.2 MQL的嵌套查询(含有Top查询:支持mysql、oracle、postgreSQL、sqlserver、sqlite)

  1. var qiantao=ScoreSet.SelectAll().Where(  
  2.                     ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(  
  3.                         UserSet.ClassID.In(  
  4.                         ClassSet.Select(ClassSet.ClassID).Where(  
  5.                                 ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))  
  6.                             )  
  7.                         )  
  8.                     )  
  9.                   )   
  10.                 ).Top(1);  
  11.   SELECT TOP 1 [Score].* FROM [Score] WHERE [Score].[UserID] IN (SELECT [User].[UserID] FROM [UserWHERE [User].[ClassID] IN (SELECT [Class].[ClassID] FROM [Class] WHERE [Class].[ClassName]=@p1  AND  [Class].[ClassID]>@p2 ) )  
  12. @p1=综合测试ClassName2  
  13. @p2=0 

2.3 MQL的分组查询

  1. var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).  
  2.  
  3. Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).  
  4.  
  5. GroupBy(ScoreSet.TypeName).  
  6.  
  7. Having(ScoreSet.ScoreM.Sum().BiggerThan(300));  
  8.  
  9.    
  10. SELECT SUM([Score].[ScoreM]) AS 'sum',[Score].[TypeName] FROM [Score] WHERE  [Score].[ScoreM]>=@p1  GROUP BY [Score].[TypeName]  HAVING  SUM([Score].[ScoreM])>@p2  
  11. @p1=100  
  12. @p2=300 

2.4 MQL的连接查询

  1. var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)  
  2.                     .LeftJoin(  
  3.                     UserSet.Select(UserSet.UserID))  
  4.                     .ON(ClassSet.ClassID.Equal(UserSet.UserID))  
  5.                     .Where(UserSet.UserID.BiggerThan(9));  
  6. SELECT [Class].[ClassID],[Class].[ClassName],[User].[UserID] FROM [Class] LEFT JOIN [User] ON [Class].[ClassID]=[User].[UserID]  WHERE  [User].[UserID]>@p1  
  7. @p1=9 

2.5 MQL的Union查询

  1. var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))  
  2.                     .Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));  
  3.    
  4. var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))  
  5.                     .UnionAll(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));  
  6.  
  7.    
  8. SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p1  UNION  SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p2  
  9. @p1=1  
  10. @p2=2  
  11. SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p1  UNION ALL SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p2  
  12. @p1=1  
  13. @p2=2 

2.6 MQL的使用预览

  1. public static void Main(string[] args)  
  2.         {  
  3.               
  4.             using (var db=Db.CreateDefaultDb()) {  
  5.                 db.TransactionEnabled=true;  
  6.                 db.DebugEnabled=true;  
  7.                 Console.WriteLine("---------------嵌套查询---------------------");  
  8.                 var qiantao=ScoreSet.SelectAll().Where(  
  9.                     ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(  
  10.                         UserSet.ClassID.In(  
  11.                         ClassSet.Select(ClassSet.ClassID).Where(  
  12.                                 ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))  
  13.                             )  
  14.                         )  
  15.                     )  
  16.                   )   
  17.                 ).Top(1);  
  18.                  
  19.                 Console.WriteLine("---------------分组查询---------------------");  
  20.                 var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).GroupBy(ScoreSet.TypeName).Having(ScoreSet.ScoreM.Sum().BiggerThan(300));  
  21.                 
  22.                 Console.WriteLine("---------------连接查询---------------------");  
  23.                 var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)  
  24.                     .LeftJoin(  
  25.                     UserSet.Select(UserSet.UserID))  
  26.                     .ON(ClassSet.ClassID.Equal(UserSet.UserID))  
  27.                     .Where(UserSet.UserID.BiggerThan(9));  
  28.  
  29.             }  
  30.             Console.WriteLine("---------------Union测试---------------------");  
  31.             using (var db=Db.CreateDefaultDb()) {  
  32.                 db.TransactionEnabled=true;  
  33.                 db.DebugEnabled=true;  
  34.                   
  35.                 var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))  
  36.                     .Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));   
  37.             }  
  38.         } 

3)使用DataSet

1.使用存储过程

  1. DataSet dataset=db.ExecuteProToDataSet("存储过程名",参数一,参数二); 

2.使用sql

  1. DataSet dataset=db.ExecuteSqlToDataSet(sql,"boy"); 


3.使用mql

  1. DataSet dataset=db.GetDataSet(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0))); 

4)使用xml配置sql查询

1.配置config节点

  1. <appSettings> 
  2. <add key="SQL_XML_FILE_NAME" value="C:\Moon\Moon.Orm\sql.xml"></add>//如果不是全路径,则默认在dll生成目录  
  3. </appSettings> 

 

2.配置xml(sql.xml)

  1. <?xml version="1.0"?> 
  2. <sqls> 
  3. <sqlxml id="getname"> 
  4. <sql>select name from user where id>@</Sql> 
  5. <description>查询用户名(描述信息)</Description> 
  6. </sqlxml> 
  7. </sqls> 

3.使用id进行查询

  1. var list=db.GetDictionaryList(XmlHelper.GetSqlXmlByID("getname"),"boy"); 

5)sql之王者归来

使用GetDynamicList ,让你体验另一种自由

  1. object,但在.net 4.0下面,您可以用dynamic直接取值.  
  2. string sql22="select * from Score";  
  3. dynamic list22=db.GetDynamicList(sql22,"Score");  
  4. foreach(var a in list22){  
  5. Console.WriteLine(a.ID+"--"+a.ScoreM+"--"+a.UserID+"--"+a.TypeName);//都是强类型  

以下是体验强类型:)

原文链接:http://www.cnblogs.com/humble/p/3380065.html

责任编辑:林师授 来源: 博客园
相关推荐

2015-12-08 11:13:38

戴尔云计算

2014-11-17 15:23:02

SAPSAP HANA

2016-03-25 15:37:18

数据治理数据分析BI

2017-11-20 15:15:24

群晖

2015-09-14 13:48:35

数据挖掘数据可视化

2014-07-10 17:21:41

SAPSAP论坛简化

2015-06-09 22:25:06

SAP大道至简

2018-04-18 07:34:58

2014-09-17 14:37:06

2017-02-07 14:27:24

安全风险威胁

2013-05-22 15:31:07

AOP的CGlib实现

2013-09-27 09:30:33

2015-02-09 18:19:38

SAPS4HANAERP

2016-03-03 10:29:31

用户信息改进

2016-08-16 13:08:23

Angular2ng-controllTypeScript

2016-07-11 16:18:26

互联网

2016-11-06 14:53:31

NetApp

2011-12-29 21:28:31

Metro UI

2010-07-21 16:23:09

运行telnet程序

2023-06-18 23:19:17

ChatGPTPPT方式
点赞
收藏

51CTO技术栈公众号