打造Orm经典,创CRUD新时代,Orm的反攻战

让我们开启数据库无Linq、零sql时代(续)

第一部分 MQL

qq群:225656797

demo下载: 点此下载(既然下载,就支持该文,关注我的博客)

 

 

1.MQL概述

MQL是Moon.Orm 5.0中的全新设计,是在之前版本的革命性的升级.目的在于让我们的数据库开发打造为无Linq、零sql.它全面贴近标准sql,噪音低.原生.NET2.0支持、高性能、语法糖.多数库多数据源支持、操作便捷简单.

           使用场景:1.NET 2.0; 2.觉得其他Orm性能低;3不喜欢linq;4.想更加便捷用sql

           说明:一下以sqlserver为例.

2.MQL查询分类讲解

2.1 MQL的标准查询

var mm=ClassSet. Select(ClassSet.ClassID,ClassSet.ClassName).

Where(ClassSet.ClassName.Contains("s").And(ClassSet.ClassID.BiggerThan(9)));

 

SELECT [Class].[ClassID],[Class].[ClassName] FROM [Class] WHERE [Class].[ClassName] LIKE @p1  AND  [Class].[ClassID]>@p2
@p1=%s%
@p2=9

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

var qiantao=ScoreSet. SelectAll(). Where(
                    ScoreSet.UserID. In(UserSet. Select(UserSet.UserID). Where(
                        UserSet.ClassID. In(
                        ClassSet. Select(ClassSet.ClassID). Where(
                                ClassSet.ClassName. Equal(c.ClassName). And(ClassSet.ClassID. BiggerThan( 0))
                            )
                        )
                    )
                  ) 
                ). Top( 1);
 
SELECT TOP 1 [Score].* FROM [Score] WHERE [Score].[UserID] IN (SELECT [User].[UserID] FROM [User] WHERE [User].[ClassID] IN (SELECT [Class].[ClassID] FROM [Class] WHERE [Class].[ClassName]=@p1  AND  [Class].[ClassID]>@p2 ) )
@p1=综合测试ClassName2
@p2=0

2.3 MQL的分组查询

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));

 

SELECT SUM([Score].[ScoreM]) AS 'sum',[Score].[TypeName] FROM [Score] WHERE  [Score].[ScoreM]>=@p1  GROUP BY [Score].[TypeName]  HAVING  SUM([Score].[ScoreM])>@p2
@p1=100
@p2=300

2.4 MQL的连接查询

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

2.5 MQL的Union查询

var mql=ClassSet. SelectAll(). Where(ClassSet.ClassID. BiggerThan( 1))
                    . Union(ClassSet. SelectAll(). Where(ClassSet.ClassID. BiggerThan( 2)));
 
var mql=ClassSet. SelectAll(). Where(ClassSet.ClassID. BiggerThan( 1))
                    . UnionAll(ClassSet. SelectAll(). Where(ClassSet.ClassID. BiggerThan( 2)));

 

SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p1  UNION  SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p2
@p1=1
@p2=2
SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p1  UNION ALL SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p2
@p1=1
@p2=2

3.MQL查询结果预览

public  static  void  Main( string[] args)
        {
            
             using ( var db=Db. CreateDefaultDb()) {
                db.TransactionEnabled= true;
                db.DebugEnabled= true;
                Console. WriteLine( "---------------嵌套查询---------------------");
                 var qiantao=ScoreSet. SelectAll(). Where(
                    ScoreSet.UserID. In(UserSet. Select(UserSet.UserID). Where(
                        UserSet.ClassID. In(
                        ClassSet. Select(ClassSet.ClassID). Where(
                                ClassSet.ClassName. Equal(c.ClassName). And(ClassSet.ClassID. BiggerThan( 0))
                            )
                        )
                    )
                  ) 
                ). Top( 1);
               
                Console. WriteLine( "---------------分组查询---------------------");
                 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));
              
                Console. WriteLine( "---------------连接查询---------------------");
                 var m1=ClassSet. Select(ClassSet.ClassID,ClassSet.ClassName)
                    . LeftJoin(
                    UserSet. Select(UserSet.UserID))
                    . ON(ClassSet.ClassID. Equal(UserSet.UserID))
                    . Where(UserSet.UserID. BiggerThan( 9));

            }
            Console.WriteLine("---------------Union测试---------------------");
            using (var db=Db.CreateDefaultDb()) {
                db.TransactionEnabled=true;
                db.DebugEnabled=true;
                
                var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
                    .Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2))); 

            }
        }
 

 

第二部分 Moo.Orm数据操作篇

1.Moon.Orm初始化说明

1.1 配置文件说明

1.1.1默认配置

<connectionStrings>
         <add name="DefaultConnection"
             connectionString="Server=QSC-E15014A6665\SQLEXPRESS;Database=Test;uid=sa;Password=123456;"              providerName="Moon.Orm,Moon.Orm.SqlServer "  />
</connectionStrings>
using ( var db=Db. CreateDefaultDb()) {
}

 1.1.2其它配置

 (详情见:Moon.Orm 5.0 (MQL版) 配置说明)

 

<connectionStrings>
         <add name="MyqlConnection"
             connectionString="mysql连接字符串"    

             providerName="Mysql自定义dllName,Mysql命名空间...类名"  />
</connectionStrings>

using ( var db=Db. CreateDbByConfigName("MysqlConnection")) {
}

1.2 通过字符串直接初始化

using ( var db= new  SqlServer( "连接字符串") {

}

2.Moon.Orm开启事务

using ( var db=Db. CreateDefaultDb()) {
                db.TransactionEnabled= true;

               //随便写许多逻辑,一个事务都在这个{}中

}

3.Moon.Orm开启调试模式

using ( var db=Db. CreateDefaultDb()) {
                db.DebugEnabled= true;

               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));

                 var sql=mql. ToDebugSQL();//可以查看当前查询语句

}

4.Moon.Orm开启缓存模式

using ( var db=Db. CreateDefaultDb()) {
                db.StartCache(秒数);//查询用的缓存
}

5.Moon.Orm添加数据

using ( var db=Db. CreateDefaultDb()) {
                db.DebugEnabled= true;
                Class c= new  Class();
                c.ClassName= "综合测试ClassName2";
                db. Add(c);

 }

6.Moon.Orm删除数据

    using ( var db=Db. CreateDefaultDb()) {
                db.DebugEnabled= true;
                db. Remove<ClassSet>(ClassSet.ClassID. BiggerThan( 9));
            }

7.Moon.Orm更新数据

using ( var db=Db. CreateDefaultDb()) {
                Class c= new  Class();
                c.ClassName= "综合测试ClassName2";
                c.WhereExpression=ClassSet.ClassID. BiggerThan( 9);
                db. Update(c);
            }

8.Moon.Orm查询数据

8.1无实体类时,使用代码生成器生成实体类

List<T> ExecuteSqlToOwnList<T>( string sql) where T: new() 
List<T> ExecuteSqlToOwnList<T>( string sql, params  object[] values) where T: new()
List<T> GetOwnList<T>(MQLBase mql)  where T:  new()

8.2无需实体类

//-----------------------------1.用MQL-------------------------------------- 
List<Dictionary< string,MObject>>  GetDictionaryList(MQLBase mql)

var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)

                . LeftJoin(
                    UserSet. Select(UserSet.UserID))
                . ON(ClassSet.ClassID. Equal(UserSet.UserID))
                . Where(UserSet.UserID. BiggerThan( 9));

var list2=db.GetDictionaryList(m1);

//-----------------------------2.用sql语句------------------------------

List<Dictionary< string,MObject>>  ExecuteSqlToDictionaryList( string sql)
List<Dictionary< string,MObject>>  ExecuteSqlToDictionaryList( string sql, params  object[] values)//支持参数化
DataSet  ExecuteSqlToDataSet( string sql)
DataSet  ExecuteSqlToDataSet( string sql, params  object[] values)
int  ExecuteSqlWithNonQuery( string sql)

8.3使用存储过程

DataSet  ExecuteProToDataSet(String procName, params DbParameter[] parameters)
int  ExecuteProWithNonQuery(String procName, params DbParameter[] parameters)
List<T> ExecuteProToOwnList<T>(String procName, params DbParameter[] parameters) where T: new()
 

 

第三部分 MQL的邀请

MQL的现状:

1.目前完成了sqlserver sqlite oracle、mysql
的开发工作. 还需要postgreSQL、、db2的核心功能的开发,当然接口和核心模块都写好了,各类型数据库的模块我们需要实现基类即可.再次发出邀请,请您加入,发邮件给我 [email protected]

2.目前我们写代码生成器(已经支持sqlserver sqlite  、mysql),你可以加入写其他数据库的生成.
您的加入只需实现接口

您的参与,将奖励:

该版本的源代码

2013-11-3 20:01:12

 

 

 

 

 

你可能感兴趣的:(crud)