让我们开启数据库无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).

)));

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

)).

GroupBy(ScoreSet.TypeName).

));

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))
                    .));
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查询

))
                    .)));
))
                    .)));
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.))
                            )
                        )
                    )
                  ) 
                ).);
               
                Console.WriteLine("---------------分组查询---------------------");
                )).));
              
                Console.WriteLine("---------------连接查询---------------------");
                var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
                    .LeftJoin(
                    UserSet.Select(UserSet.UserID))
                    .ON(ClassSet.ClassID.Equal(UserSet.UserID))
                    .));

}
            Console.WriteLine("---------------Union测试---------------------");
            using (var db=Db.CreateDefaultDb()) {
                db.TransactionEnabled=true;
                db.DebugEnabled=true;
                
                ))
                    .)));

}
        }

第二部分 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).

)).GroupBy(ScoreSet.TypeName).

));

                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删除数据

    ));
            }

7.Moon.Orm更新数据

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

                .));

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的核心功能的开发,当然接口和核心模块都写好了,各类型数据库的模块我们需要实现基类即可.再次发出邀请,请您加入,发邮件给我 qsmy_qin@163.com

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

您的参与,将奖励:

该版本的源代码

2013-11-3 20:01:12

打造Orm经典,创CRUD新时代,Orm的反攻战的更多相关文章

  1. MEAN实践——LAMP的新时代替代方案(上)

    摘要:90 年代,LAMP 曾风靡一时,然而随着需求的变迁和数据流量的激增,LAMP 已不可避免的走下神坛.近日,在 MongoDB Blog 中,Dana Groce 介绍了一个基于新时代架构的实践 ...

  2. 全景智慧城市——VR全景,开启VR营销新时代

    全景是一种新兴的富媒体技术. 与视频.声音.图片等传统主流媒体最大的区别是"可操作,可交互". 全景给人以三维立体感觉的实景360°全方位图像,此图像最大的三个特点: 全方位:展示 ...

  3. BGV作为拥抱新时代的DeFi项目,是否有能力超越YFI?

    随着今年11月DeFi蓝筹股们的集体反弹,市场变化让投资者明白,不能再死守诸如COMP和MKR的古典DeFi了,只有拥抱新时代的DeFi们才有赚钱的可能,不要和钱过不去.经过9-10月的回调,11月的 ...

  4. GVS案例分享|乘新时代姑苏舫号,体验匠心智能控制

    水,是苏州的灵魂,串起苏州的古与今.动与静.金鸡湖景区位于苏州工业园区,总面积11.5平方公里,其中水域面积7.4平方公里. 新时代姑苏舫号,是金鸡湖景区极具苏式特征且规格超高的游览船型.船体分为上下 ...

  5. 什么是ORM思想?常用的基于ORM的框架有哪些?各有什么特点?

    ORM的全称是Object-Relational Mapping,即对象关系映射.ORM思想的提出来源于对象与关系之间相悖的特性.我们很难通过对象的继承与聚合关系来描述数据表中一对一.一对多以及多对多 ...

  6. 组合式应用新利器?SaaS新时代事件网格如何解决集成标准化问题

    摘要:组合式应用需要面临的一个难题是如何解决各个应用之间的集成标准问题,比如应用可能仅支持HTTP.TCP等协议中的一种,而缺乏统一的通讯标准就给业务落地该架构带来了困难.下面介绍事件网格(Event ...

  7. C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)

    反射以及Attribute在ORM中的应用 一. 反射什么是反射?简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等.反射有什么用呢?反射不但让你在运行 ...

  8. Vimer的福音 新时代的Vim C++自动补全插件 clang_complete

    使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete .这一类的插件都是对 Ctags 生成的符号表进行字符串匹配来获得可能的补全项.他们在编写 C 代码 ...

  9. 新时代的Vim C++自动补全插件 clang_complete

    Vimer的福音 新时代的Vim C++自动补全插件 clang_complete   使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete .这一类的插 ...

随机推荐

  1. ffmpeg编译与移植问题

    1.下载ffmpeg. 下载网址:http://www.ffmpeg.org/download.html 2.解压缩 tar -zxvf ffmpeg-2.0.1.tar.gz 3.配置,生成Make ...

  2. Linux上传下载文件快捷命令

    远程链接Linux(如SecrueCRT),要上传文件很下载文件到Linux服务器,只需要使用sz或者rz命令即可快速下载和上传文件了. 使用方法: 1.首先确保Linux服务器系统中安装了lrzsz ...

  3. Microservice 微服务的理论模型和现实路径

    两年前接触到了微服务的概念,面对日益膨胀的系统感觉豁然开朗.之后的两年逐步把系统按微服务的架构理念进行了重构,并将业务迁移到了新架构之上.感觉现在差不多是时候写一篇关于微服务的总结文章了. 定义 在 ...

  4. .NET程序反汇编JustDecompile 开源

    JustDecompile是Telerik公司推出一个免费的.net反编译工具,支持插件,与Visual Studio 集成,能够创建Visual Studio project文件.JustDecom ...

  5. C语言指针转换为intptr_t类型

    1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...

  6. WPF RichTextBox 做内容展示框 滚动条控制判定是否阅读完成

    一.项目背景: 最近,做项目,因为是金融项目,客户登录交易的时候,有一个提示框,就是告知客户要“入市需谨慎”等等,想必大家都遇到这样的场景,当然,这种提示是没人会看的,不过作为交易所,这样的提示又必不 ...

  7. SQL Server 深入解析索引存储(中)

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆 概述 本篇文章是关于堆的存储结构.堆是不含聚集索引的表(所以只有非聚集索引的表也是堆).堆的 sys.parti ...

  8. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  9. EditText中imeOptions属性使用及设置无效解决

    虽然通常输入法软键盘右下角会是回车按键 但我们经常会看到点击不同的编辑框,输入法软键盘右下角会有不同的图标 点击浏览器网址栏的时候,输入法软键盘右下角会变成“GO”或“前往” 而我们点击Google搜 ...

  10. AngularJS表单验证实现方法详解

    本文主要是通过源码实例和大家分享AngularJS中的表单验证相关知识,希望通过本文的分享,对大家学习AngularJS有所帮助. 1.常规表单验证: 2.AngularJs中提供的表单验证实例. 实 ...