Orm 常見查詢實例

1、Moon.Orm框架總述 (您還用hibernate?實體框架?)

1.框架名:Moon 意思是月亮,而非Mono.由於很喜歡明月,因此以此爲名.它是一個.NET下的Orm框架.html

2.發展歷史:歷經近乎三年的發展歷程,原由是EF框架的起初性能緣由,爲項目實戰而生.mysql

3.項目經驗:通過數家公司項目實戰、以及衆多用戶的確定.sql

 

qq羣: 225656797 

 

Moon.Orm的追求方向:

1)高性能.
這也是架構建立的目的之一,已經將它的性能提高到了極致.你們能夠本身測試.我能夠說其性能是首屈一指的.
鏈接地址: Moon洗冤錄
2)易用性強
我想,用過Moon.ORM的應該能夠知道這點.配置簡單,智能感知,代碼生成器的輔助,會sql就可以使用之.
詳情見,鏈接地址: Moon使用配置說明
3)多數據庫多數據源支持
在同一個項目中咱們經常須要處理這些狀況時.目前moon的目標,支持sqlserver sqlite oracle mysql postgreSQL db2

若是您須要換數據庫:直接修改配置文件而後一鍵生成實體層便可;數據庫

若是您須要多數據庫:直接添加配置文件便可.詳情:Moon使用配置說明架構

4)智能感知

這個不用講了,值得一提的是MQL,她可以爲你提供強大的智能感知功能,而且無數據庫類型差別.oracle

詳情:MQL無linq化的戰役框架

5).NET 2.0原生支持.

有人問:爲何沒有LINQ、lambda,其實我只想說:沒有必要作這些了,由於微軟一個團隊在作實體框架,去作一些沒必要要的事情,sqlserver

真的沒有意思. 以爲MQL複雜的兄弟們,有了智能感知,大家就適應適應,由於這是蘿蔔白菜的問題.post

6) 使用便捷.

這個其實上面的連接也談到,詳情見:http://www.cnblogs.com/humble/p/3293500.html性能

 

2、Moon.Orm的功能預覽

 

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

            }
        }

 

 

 

 

 

 

3、Moon.Orm的開源發佈

1)Moon.Orm 5.0以前的版本以(LGPL)開源發佈

 

 

2)以後的版本步步開源,對於參與者提供源代碼.

 

 

若是您參與Moon.Orm的核心開發或輔助平臺開發,您將直接得到5.0的源代碼,有意者聯繫:qsmy_qin@163.com

固然您能夠資金支持.十塊錢那也是支持,請註明,您的郵箱地址.

 

 
5.0框架下載: http://www.cnblogs.com/humble/p/3298594.html

5.0社區版代碼生成器下載:http://www.cnblogs.com/humble/p/3312018.html

 

4、Moon.Orm的技術文檔

 若是您喜歡它,請推薦支持一下吧:)

 待續
相關文章
相關標籤/搜索