Moon.Orm 常見查詢例項
一、Moon.Orm框架總述 (您還用hibernate?實體框架?)
1.框架名:Moon 意思是月亮,而非Mono.因為很喜歡明月,所以以此為名.它是一個.NET下的Orm框架.
2.發展歷史:歷經近乎三年的發展歷程,起因是EF框架的起初效能原因,為專案實戰而生.
3.專案經驗:經過數家公司專案實戰、以及眾多使用者的肯定.
qq群:225656797Moon.Orm的追求方向:
1)高效能.
這也是架構建立的目的之一,已經將它的效能提升到了極致.大家可以自己測試.我可以說其效能是數一數二的.連線地址:Moon洗冤錄
2)易用性強
我想,用過Moon.ORM的應該可以知道這點.配置簡單,智慧感知,程式碼生成器的輔助,會sql就可使用之.3)多資料庫多資料來源支援
如果您需要換資料庫:直接修改配置檔案然後一鍵生成實體層即可;
如果您需要多資料庫:直接新增配置檔案即可.詳情:Moon使用配置說明
4)智慧感知
這個不用講了,值得一提的是MQL,她能夠為你提供強大的智慧感知功能,並且無資料庫型別差異.
5).NET 2.0原生支援.
有人問:為什麼沒有LINQ、lambda,其實我只想說:沒有必要做這些了,因為微軟一個團隊在做實體框架,去做一些不必要的事情,
真的沒有意思. 覺得MQL複雜的兄弟們,有了智慧感知,你們就適應適應,因為這是蘿蔔白菜的問題.
6) 使用便捷.
二、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)
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][email protected] 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]>[email protected] 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)));
}
三、Moon.Orm的開源釋出
1)Moon.Orm 5.0之前的版本以(LGPL)開源釋出
2)之後的版本步步開源,對於參與者提供原始碼.
如果您參與Moon.Orm的核心開發或輔助平臺開發,您將直接獲得5.0的原始碼,有意者聯絡:[email protected]當然您可以資金支援.十塊錢那也是支援,請註明,您的郵箱地址.
5.0框架下載:http://www.cnblogs.com/humble/p/3298594.html四、Moon.Orm的技術文件
如果您喜歡它,請推薦支援一下吧:)
待續