五一干貨來襲!開源Moon.Orm標准版發布!


 標准版源代碼下載:

鏈接:http://pan.baidu.com/s/1i3xj0f7

因五一早過(現在中旬了),解壓碼獲取請到: http://www.cnblogs.com/humble/p/3323161.html

 

為什么選擇Moon.Orm?

  1)發現實體框架不能滿足大型系統中性能需求;(兄台就不要辯論了,咱們已經辯論太多,累了)

  2)其他開源框架使用起來配置麻煩,如mybatis,nh..........

  3)sql在VS中沒有智能感知,維護不便,如Dapper......

      4)某些框架設計中一致性存在問題,語言晦澀.........

  5)實戰性強、被諸多企業使用

性能測評:http://www.cnblogs.com/humble/p/3472764.html

1.簡介

  Moon是一個 orm 框架.關於它和其他 實體框架、NH 的對比,大家可以閱讀:www.cnblogs.com/humble/p/3426888.html
    Moon.Orm,意在打造高性能、易用、便捷、易於維護、多數據庫數據源支持的 Orm 框架。

     全方位介紹:最全面的介紹文檔(點擊這里)

 

2.使用步驟

  1.下載代碼生成器生成model;

  2.引用model及moon.orm到你的具體項目;

  3.填寫你的項目中配置文件;(關於配置文件:地址)

  4.開始使用;

      使用步驟:點擊去看看,這里很久以前的示例,大家可用新版本

  代碼生成器鏈接地址:點擊下載(這里是最新的)

  對應的旗艦版的版本維護:點擊這里,可到這里隨時更新

使用過程

 

3.增刪改查

(下面代碼對應的下載地址:http://pan.baidu.com/s/1mg3iZ12

注意:

  1.請將數據庫附加到您的數據庫中.數據庫下載地址:http://pan.baidu.com/s/1eQjIz7O

  2.注意修改對應的配置文件中連接字符串;

)

數據庫關系

 

        /// <summary>
        /// 添加實體對象的測試
        /// </summary>
        /// <returns></returns>
        public static void TestAddEntity(){
            using (var db=Db.CreateDefaultDb()) {
                var startCount=GetProductCount();
                Products p=new Products();
                p.ProductName="ProductName"+DateTime.Now;
                p.Quantity=100;
                p.Remark="標記";
                p.Unit="單元";
                p.UnitPrice=12m;
                p.CategoryId=3;
                db.Add(p);
                //克隆一個p對象,然后添加到數據庫中
                var p2=p.Clone<Products>();
                db.Add(p2);
                var endCount=GetProductCount();
                Console.WriteLine("添加條數為:"+(endCount-startCount));
            }
        }
        /// <summary>
        /// 刪除實體對象的測試
        /// </summary>
        public static void TestRemoveEntity(){
            using (var db=Db.CreateDefaultDb()) {
                var startCount=GetProductCount();
                Products p=new Products();
                p.ProductName="ProductName"+DateTime.Now;
                p.Quantity=100;
                p.Remark="標記";
                p.Unit="單元";
                p.UnitPrice=12m;
                p.CategoryId=3;
                db.Add(p);
                //刪除這條新加的數據
                db.Remove<ProductsSet>(ProductsSet.ProductId.Equal(p.ProductId));
                var endCount=GetProductCount();
                Console.WriteLine("添加條數為:"+(endCount-startCount));
            }
        }
        public static void TestUpdateEntity(){
            using (var db=Db.CreateDefaultDb()) {
                db.DebugEnabled=true;
                var p=db.GetEntity<Products>(ProductsSet.SelectAll().Top(1));
                Console.WriteLine(p.ProductName);
                p.ProductName=p.ProductName+DateTime.Now;
                p.Quantity=11;
                //必須通過設置WhereExpression來指定需要更新哪些數據
                //--的確讓用戶有點誤解,但這樣可以指定更廣泛的合符條件的數據如>100 and a<100
                p.WhereExpression=ProductsSet.ProductId.Equal(p.ProductId);
                db.Update(p);
                var sql=db.CurrentSQL;
                p=db.GetEntity<Products>(ProductsSet.SelectAll().Top(1));
                Console.WriteLine(p.ProductName);
            }
            
        }

 

2.mql查詢語句

1)分組查詢

        /// <summary>
        /// 測試group及having語句
        /// </summary>
        public static DictionaryList TestHaving(){
            using (var db=Db.CreateDefaultDb()) {
                var mql=OrdersSet.Select(OrdersSet.OrderId.Count(),OrdersSet.CustomerId,OrdersSet.Finished)
                    .Where(OrdersSet.CustomerId.SmallerThan(20))
                    .GroupBy(OrdersSet.CustomerId,OrdersSet.Finished)
                    .Having(OrdersSet.OrderId.Count().BiggerThan(2)).Top(5);
                var sql=mql.ToDebugSQL();//等價sql語句
                var list=db.GetDictionaryList(mql);
                return list;
            }
        }
 SELECT TOP 5 COUNT([Orders].[OrderId]),[Orders].[CustomerId],
[Orders].[Finished] FROM [Orders] WHERE  [Orders].[CustomerId]<@p1
  GROUP BY [Orders].[CustomerId] ,[Orders].[Finished] HAVING  
COUNT([Orders].[OrderId])>@p2

@p1=20
@p2=2

 2)連接查詢

        /// <summary>
        /// 測試join語句
        /// </summary>
        public static DictionaryList TestJoin(){
            using (var db=Db.CreateDefaultDb()) {
                var mql1=CustomersSet.Select(CustomersSet.CustomerName);
                var join=mql1.LeftJoin(OrdersSet.SelectAll())
                    .ON(OrdersSet.CustomerId.Equal(CustomersSet.CustomerId).And(OrdersSet.OrderId.SmallerThan(1000)))
                    .Where(OrdersSet.OrderId.BiggerThan(1)).Top(10);
                var sql=join.ToDebugSQL();//等價sql語句
                var list=db.GetDictionaryList(join);
                return list;
            }
        }
SELECT TOP 10 [Customers].[CustomerName],[Orders].* FROM 
[Customers] LEFT JOIN [Orders] ON ( [Orders].[CustomerId]=
[Customers].[CustomerId]  AND  [Orders].[OrderId]<@p1  ) WHERE  
[Orders].[OrderId]>@p2

@p1=1000
@p2=1

 3)多連接查詢

        /// <summary>
        /// 測試三條jion的語句
        /// </summary>
        public static DictionaryList TestHighJoinMQL(){
            using (var db=Db.CreateDefaultDb()) {
                var mql1=CustomersSet.Select(CustomersSet.CustomerName);
                var doubleJoin=mql1.LeftJoin(OrdersSet.Select(OrdersSet.OrderId.AS("_OrderId")))
                    .ON(OrdersSet.CustomerId.Equal(CustomersSet.CustomerId).And(OrdersSet.OrderId.SmallerThan(100)))
                    ;
                var threeJoin=doubleJoin.LeftJoin(OrderDetailsSet.SelectAll())
                    .ON(OrderDetailsSet.OrderId.Equal(OrdersSet.OrderId).And(OrderDetailsSet.OrderId.BiggerThan(2)))
                    .Where(OrdersSet.OrderId.SmallerThan(999)).Top(10);
                
                var sql=threeJoin.ToDebugSQL();//等價sql語句
                var list=db.GetDictionaryList(threeJoin);
                return list;
            }
        }
SELECT TOP 10 * FROM (SELECT [Customers].[CustomerName],[Orders].
[OrderId] as "_OrderId" , [OrderDetails].*  FROM [Customers] LEFT JOIN
 [Orders] ON ( [Orders].[CustomerId]=[Customers].[CustomerId]  AND  
[Orders].[OrderId]<@p1  )  LEFT JOIN [OrderDetails] ON [OrderDetails].
[OrderId]=[Orders].[OrderId]  AND  [OrderDetails].[OrderId]>@p2  
WHERE  [Orders].[OrderId]<@p3 ) TopTemp1

@p1=100
@p2=2
@p3=999

 4)嵌套查詢

        /// <summary>
        /// 嵌套查詢
        /// </summary>
        /// <returns></returns>
        public static DictionaryList QianTao(){
            using (var db=Db.CreateDefaultDb()) {
                var testBool=OrdersSet.SelectAll().Where(
                    OrdersSet.CustomerId.In(
                        CustomersSet.Select(CustomersSet.CustomerId).Where(CustomersSet.CustomerName.Contains("00"))
                    ).And(OrdersSet.OrderId.BiggerThan(8))
                );
                var sql=testBool.ToDebugSQL();//等價sql語句
                return db.GetDictionaryList(testBool);
            }
        }
SELECT [Orders].* FROM [Orders] WHERE [Orders].[CustomerId] IN 
(SELECT [Customers].[CustomerId] FROM [Customers] WHERE 
[Customers].[CustomerName] LIKE @p1 )  AND  [Orders].[OrderId]>@p2

@p1=%00%
@p2=8

 

5)Union查詢

         /// <summary>
        /// Union測試
        /// </summary>
        /// <returns></returns>
        public static DictionaryList TestUnion(){
            using (var db=Db.CreateDefaultDb()) {
                var mql1=CustomersSet.SelectAll().Where(CustomersSet.CustomerId.BiggerThan(10));
                var mql2=CustomersSet.SelectAll().Where(CustomersSet.CustomerId.SmallerThan(10));
                var mql3=CustomersSet.SelectAll().Where(CustomersSet.CustomerId.Equal(10));
                var mql=mql1.Union(mql2).Union(mql3).Top(1);
                var sql=mql.ToDebugSQL();//等價sql語句
                return db.GetDictionaryList(mql);
                
            }
        }
SELECT TOP 1 * FROM (SELECT [Customers].* FROM [Customers] WHERE 
 [Customers].[CustomerId]>@p1  UNION  SELECT [Customers].* FROM 
[Customers] WHERE  [Customers].[CustomerId]<@p2  UNION  SELECT 
[Customers].* FROM [Customers] WHERE [Customers].
[CustomerId]=@p3 ) TopTemp1

@p1=10
@p2=10
@p3=10

 6)深度嵌套

public static DictionaryList QianTao3(){
            using (var db=Db.CreateDefaultDb()) {
                var mql1=CustomersSet.Select(CustomersSet.CustomerId).Where(CustomersSet.CustomerName.Contains("00"));
                var mql2=OrdersSet.Select(OrdersSet.OrderId).Where(OrdersSet.CustomerId.In(mql1));
                var mql3=OrderDetailsSet.Select(OrderDetailsSet.ProductId).Where(OrderDetailsSet.OrderId.In(mql2));
                var mqlEnd=ProductsSet.SelectAll().Where(ProductsSet.ProductId.In(mql3).And(ProductsSet.Quantity.BiggerThan(2)));
                var sql=mqlEnd.ToDebugSQL();
                return db.GetDictionaryList(mqlEnd);
            }
        }
SELECT [Products].* FROM [Products] WHERE [Products].[ProductId] IN (
    SELECT [OrderDetails].[ProductId] FROM [OrderDetails] WHERE [OrderDetails].[OrderId] IN (
        SELECT [Orders].[OrderId] FROM [Orders] WHERE [Orders].[CustomerId] IN (
            SELECT [Customers].[CustomerId] FROM [Customers] WHERE [Customers].[CustomerName] LIKE @p1 
            ) 
        ) 
) 
 AND  [Products].[Quantity]>@p2 
@p1=%00%
@p2=2

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM