<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          .NET 6 開源之JSON 2 SQL (JORM框架)

          共 6406字,需瀏覽 13分鐘

           ·

          2022-07-27 00:19


          什么是JORM框架?


          稱 :Json Object Relational Mapping  ,它是通過JSON 對象 去實現(xiàn)數(shù)據(jù)庫的一個關系映射 ,我理想中完整的JORM包含功能有

          1、表權授權

          2、字段級別授權

          3、查詢返回備注

          4、可以配置化

          5、支持豐富的SQL語法

          6、數(shù)據(jù)驗證

          7、JSON作為數(shù)據(jù)庫中間語言支持多種數(shù)據(jù)庫

          為什么要開發(fā)JORM

          我們都知道 ORM用起來非常舒服,都強類型,但是他的缺點很顯

          1、對動態(tài)操作支持比較弱 , 很多功能都要自個封裝,很難支持到函數(shù)級別

          2、不能支持列級別的過濾,比如A用戶顯示2列,B用戶顯示3列,像這種很難處理

          3、無法動態(tài)構造,這就導致了無法很好的用在 工作流、低代碼平臺或者人工智能產(chǎn)品中,很多都是需要自個拼SQL,查詢用Datable等

          SqlSugar 開始支持JORM

          SqlSugar是一款 老牌 .NET 開源ORM框架,由果糖大數(shù)據(jù)科技團隊維護和更新

          為提高本公司內部產(chǎn)品的開發(fā)效率,準備打造一款低代碼平臺,所以從2022年1月份已經(jīng)開始設計和架構 支持JORM操作數(shù)據(jù)庫

          創(chuàng)建JORM對象

          JsonClient jsonToSqlClient = new JsonClient();
          jsonToSqlClient.Context = new SqlSugarClient(new ConnectionConfig()
                     {
                         DbType = DbType.MySql,
                         IsAutoCloseConnection = true,
                         ConnectionString = "server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql"
                     });

          一、查詢功能

          1.1、帶有函數(shù)的查詢

          Json格式

          {
           "Table":"order",
                Select:[ [{SqlFunc_AggregateMin:["id"]},"id"], [{SqlFunc_GetDate:[]},"Date"] ]
          }

          代碼

           jsonToSqlClient.Queryable(json).ToSql()
          //Sql
          //SELECT MIN(`id`) AS `id` , NOW() AS `Date` FROM `Order`  

          2.2、帶有條件的查詢

          {
            "Table":"order",
                Where:[  "name","=""{string}:xxx"  ],
                Select:[ [{SqlFunc_AggregateMin:["id"]},"id"], [{SqlFunc_GetDate:[]},"Date"] ]
          }

          代碼

          jsonToSqlClient.Queryable(json).ToSql()
          //Sql
          //SELECT MIN(`id`) AS `id` , NOW() AS `Date` FROM `Order`   WHERE `name` =  @p0

          條件查詢有2種語法

          語法1:可以完美支持 SqlSugar表格查詢語法

          Where: [{ ""FieldName"":""id"",""ConditionalType"":""0"",""FieldValue"":""1""}]

          語法2:逗號拼接方式

          Where:["name","=","{string}:a" , "&&" , "id" ,">", "{int}:1"]

          運算符號: = 、>、<、>=、<=、&&、||、(、)

          字段名:字母數(shù)字下劃線

          參數(shù)值: {int}:1 表式類型為int值為1的參數(shù)

          函數(shù):{SqlFunc_AggregateMin:["id"]} 表式 min(id)

          2.3、分頁查詢

          Json格式

          {
            "Table":"order",
                PageNumber:"1",
                PageSize:"100"
          }

          代碼

          var sqls=jsonToSqlClient.Queryable(json).ToSqlList()
          //SELECT COUNT(1FROM `Order`
          //SELECT * FROM `Order`      LIMIT 0,100

          2.4、分組查詢

          Json格式

          {
              "Table":  "order" ,
                GroupBy:["name"],
                Having: [{SqlFunc_AggregateAvg:["id"]},">","{int}:1" ],
                Select:[ [{SqlFunc_AggregateAvg:["id"]},"id"],"name" ]
          }

          代碼

          var sql= jsonToSqlClient.Queryable(json).ToSql()
          //SELECT AVG(`id`AS `id` , `name` AS `name` FROM `Order`  GROUP BY  `name`  HAVING AVG(`id`) > @p0 

          2.5、聯(lián)表查詢

          Json格式

          {
              "Table":[ "order","o"],
              "LeftJoin01": ["orderdetail""d", [  "d.orderid",">","o.id"  ]],
              "Select":["o.id" ,["d.itemid","newitemid"]]
          }

          代碼

          var sql= jsonToSqlClient.Queryable(json).ToSql();
          //SELECT `o`.`id` AS `o_id` , `d`.`itemid` AS `newitemid` FROM `Order` o Inner JOIN `orderdetail` d ON `d`.`orderid` > `o`.`id`  

          2.6、授權查詢

          該功能目前還不完善,暫時不細解

          var tableNames = jsonToSqlClient.GetTableNameList(json);//通過JSON獲取JSON所有表
           var configs = GetConfigByUser(tableNames);//通過表獲取行列過濾備注等信息
           
                   var sqlList = jsonToSqlClient
                      .Queryable(json)
                      .UseAuthentication(configs)//查詢啟用行列過濾
                      .ShowDesciption()//查詢返回備注
                      .ToResult();

          二、插入

          單條插入

          {
              "Table":"order",
                Columns:{name:"{string}:1",price:"{decimal}:1"}
          }

          批量持入

          {
              "Table":"order",
                  Columns:[ {name:"{string}:2",price:"{decimal}:2"} , {name:"{string}:1",price:"{decimal}:1"}  ]
          }

          帶自增列

          {
            "Table":"order",
                Identity:"id",
                Columns:  {name:"{string}:2",price:"{decimal}:2"
          }

          三、更新

          單個對象更新

          {
              "Table":"order",
                Columns: { id:"{int}:1" ,name:"{string}:1" },
                WhereColumns:["id"]
          }

          多個對象更新

          {
              "Table":"order",
                Columns:[ {id:2,name:"{string}:2",price:"{decimal}:2"}  , {id:1,name:"{string}:1",price:"{decimal}:1"}  ],
                WhereColumns:["id"]            
          }

          Sql語句方式更新

          {
              "Table":"order",
                Columns: {name:"{string}:2",price:"{decimal}:2"}  ,
                Where:["id","=","{int}:11"]               
          }

          四、刪除

          Where中的用法和查詢一樣的

          Json格式

          {
              "Table":"order",
                Where:[ "id"," = ","{int}:1" ]
          }

          代碼

          jsonToSqlClient.Deleteable(json).ToSqlList()
          //DELETE FROM `order` WHERE `id` = @p0

          五、源碼下載

          SqlSugar未來將重點開發(fā)JORM ,喜歡低代碼平臺或者工作流的朋友,可以關注一下, 目前還是開發(fā)階段 ,預計在未來3個月內投入生產(chǎn)

          https://github.com/donet5/SqlSugar

          很多人問有了EF Core為什么還有其它ORM ,這個問題就等于淘寶只有天貓一樣,只有豐富的產(chǎn)品才會形成良性競爭,讓用戶有更多選擇。

          轉自:果糖大數(shù)據(jù)科技

          鏈接:cnblogs.com/sunkaixuan/p/16393199.html


          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产高潮免费视频 | 嫩逼网 | 插逼免费视频 | 91成人在线视频 | 一级黄色BB片 |