.NET6 开源之JSON 2 SQL (JORM框架)

打印 上一主题 下一主题

主题 647|帖子 647|积分 1941

什么是JORM框架?

全称 :Json  Object Relational Mapping   ,它是通过JSON 对象 去实现数据库的一个关系映射 ,我理想中完整的JORM包含功能有
·1、表权授权
2、字段级别授权
3、查询返回备注
4、可以配置化
5、支持丰富的SQL语法 
6、数据验证
7、JSON作为数据库中间语言支持多种数据库
 
为什么要开发JORM

我们都知道 ORM用起来非常舒服,都强类型,但是他的缺点很显
1、对动态操作支持比较弱 , 很多功能都要自个封装,很难支持到函数级别
2、不能支持列级别的过滤,比如A用户显示2列,B用户显示3列,像这种很难处理
3、无法动态构造,这就导致了无法很好的用在 工作流、低代码平台或者人工智能产品中,很多都是需要自个拼SQL,查询用Datable等
 
SqlSugar 开始支持JORM

SqlSugar是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新
为提高本公司内部产品的开发效率,准备打造一款低代码平台,所以从2022年1月份已经开始设计和架构 支持JORM操作数据库
 
创建JORM对象
  1. JsonClient jsonToSqlClient = new JsonClient();
  2. jsonToSqlClient.Context = new SqlSugarClient(new ConnectionConfig()
  3.             {
  4.                 DbType = DbType.MySql,
  5.                 IsAutoCloseConnection = true,
  6.                 ConnectionString = "server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql"
  7.             });<br>
复制代码
  
 
1、查询功能

1.1  带有函数的查询

Json格式:
  1.                 {
  2.                      "Table":"order",
  3.                       Select:[ [{SqlFunc_AggregateMin:["id"]},"id"], [{SqlFunc_GetDate:[]},"Date"] ]
  4.                 }
复制代码
代码:
  1. jsonToSqlClient.Queryable(json).ToSql()
  2. //Sql
  3. //SELECT MIN(`id`) AS `id` , NOW() AS `Date` FROM `Order`
复制代码
2.2  带有条件的查询
  1.                 {
  2.                       "Table":"order",
  3.                       Where:[  "name","=", "{string}:xxx"  ],
  4.                       Select:[ [{SqlFunc_AggregateMin:["id"]},"id"], [{SqlFunc_GetDate:[]},"Date"] ]
  5.                 }
复制代码
代码:
  1. jsonToSqlClient.Queryable(json).ToSql()
  2. //Sql
  3. //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"] 

运算符号: = 、>、=、 @p0 [/code]2.5联表查询

Json格式:
  1.                 {
  2.                       "Table":"order",
  3.                       PageNumber:"1",
  4.                       PageSize:"100"
  5.                 }
复制代码
代码:
  1. var sqls=jsonToSqlClient.Queryable(json).ToSqlList()
  2. //SELECT COUNT(1) FROM `Order`
  3. //SELECT * FROM `Order`      LIMIT 0,100
复制代码
2.6授权查询  

该功能目前还不完善,暂时不细解
  1. {
  2.     "Table":  "order" ,
  3.       GroupBy:["name"],
  4.       Having: [{SqlFunc_AggregateAvg:["id"]},">","{int}:1" ],
  5.       Select:[ [{SqlFunc_AggregateAvg:["id"]},"id"],"name" ]
  6. }
复制代码
2、插入  

单条插入
  1. var sql= jsonToSqlClient.Queryable(json).ToSql()
  2. //SELECT AVG(`id`) AS `id` , `name` AS `name` FROM `Order`  GROUP BY  `name`  HAVING AVG(`id`) > @p0
复制代码
批量持入
  1. {
  2.     "Table":[ "order","o"],
  3.     "LeftJoin01": ["orderdetail", "d", [  "d.orderid",">","o.id"  ]],
  4.     "Select":["o.id" ,["d.itemid","newitemid"]]
  5. }
复制代码
带自增列
  1. var sql= jsonToSqlClient.Queryable(json).ToSql();
  2. //SELECT `o`.`id` AS `o_id` , `d`.`itemid` AS `newitemid` FROM `Order` o Inner JOIN `orderdetail` d ON `d`.`orderid` > `o`.`id`   
复制代码
  
3、更新  

单个对象更新
  1.     var tableNames = jsonToSqlClient.GetTableNameList(json);//通过JSON获取JSON所有表
  2.      var configs = GetConfigByUser(tableNames);//通过表获取行列过滤备注等信息
  3.              var sqlList = jsonToSqlClient
  4.                 .Queryable(json)
  5.                 .UseAuthentication(configs)//查询启用行列过滤
  6.                 .ShowDesciption()//查询返回备注
  7.                 .ToResult();
复制代码
  
多个对象更新
  1.                 {
  2.                         "Table":"order",
  3.                       Columns:{name:"{string}:1",price:"{decimal}:1"}
  4.                 }
  5.                
复制代码
  
Sql语句方式更新
  1.                 {
  2.                         "Table":"order",
  3.                         Columns:[ {name:"{string}:2",price:"{decimal}:2"} , {name:"{string}:1",price:"{decimal}:1"}  ]
  4.                 }
  5.                
复制代码
4、删除 

Where中的用法和查询一样的
Json格式
  1.                 {
  2.                       "Table":"order",
  3.                       Identity:"id",
  4.                       Columns:  {name:"{string}:2",price:"{decimal}:2"}  
  5.                 }
复制代码
代码:
  1.                 {
  2.                     "Table":"order",
  3.                       Columns: { id:"{int}:1" ,name:"{string}:1" },
  4.                       WhereColumns:["id"]
  5.                 }
复制代码
  
源码下载地址:

SqlSugar未来将重点开发JORM  ,喜欢低代码平台或者工作流的朋友,可以关注一下, 目前还是开发阶段 ,预计在未来3个月内投入生产
 https://github.com/donet5/SqlSugar       群号:995692596

 
 
.很多人问有了EF CORE为什么还有其它ORM ,这个问题就等于淘宝只有天猫一样,只有丰富的产品才会形成良性竞争,让用户有更多选择
  
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表