前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET6 开源之JSON 2 SQL (JORM框架)

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

作者头像
郑子铭
发布2023-08-29 09:08:22
2850
发布2023-08-29 09:08:22
举报
文章被收录于专栏:DotNet NB && CloudNative

什么是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对象

代码语言:javascript
复制
JsonClient jsonToSqlClient = new JsonClient();
jsonToSqlClient.Context = new SqlSugarClient(new ConnectionConfig()
           {
               DbType = DbType.MySql,
               IsAutoCloseConnection = true,
               ConnectionString = "server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql"
           });<br>

1、查询功能

1.1 带有函数的查询

Json格式

代码语言:javascript
复制
{
 "Table":"order",
      Select:[ [{SqlFunc_AggregateMin:["id"]},"id"], [{SqlFunc_GetDate:[]},"Date"] ]
}

代码:

代码语言:javascript
复制
 jsonToSqlClient.Queryable(json).ToSql()
//Sql
//SELECT MIN(`id`) AS `id` , NOW() AS `Date` FROM `Order`

2.2 带有条件的查询

代码语言:javascript
复制
{
  "Table":"order",
      Where:[  "name","=", "{string}:xxx"  ],
      Select:[ [{SqlFunc_AggregateMin:["id"]},"id"], [{SqlFunc_GetDate:[]},"Date"] ]
}

代码

代码语言:javascript
复制
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"]

运算符号: = 、>、<、>=、<=、&&、||、(、)

字段名:字母数字下划线 

参数值: {int}:1 表式类型为int值为1的参数

函数:{SqlFunc_AggregateMin:["id"]} 表式 min(id)

2.3 分页查询

Json格式:

代码语言:javascript
复制
{
  "Table":"order",
      PageNumber:"1",
      PageSize:"100"
}

代码

代码语言:javascript
复制
var sqls=jsonToSqlClient.Queryable(json).ToSqlList()
//SELECT COUNT(1) FROM `Order`
//SELECT * FROM `Order`      LIMIT 0,100

2.4分组查询

Json格式:

代码语言:javascript
复制
{
    "Table":  "order" ,
      GroupBy:["name"],
      Having: [{SqlFunc_AggregateAvg:["id"]},">","{int}:1" ],
      Select:[ [{SqlFunc_AggregateAvg:["id"]},"id"],"name" ]
}

代码:

代码语言:javascript
复制
代码语言:javascript
复制
var sql= jsonToSqlClient.Queryable(json).ToSql()
//SELECT AVG(`id`) AS `id` , `name` AS `name` FROM `Order`  GROUP BY  `name`  HAVING AVG(`id`) > @p0
代码语言:javascript
复制
2.5联表查询

Json格式:

代码语言:javascript
复制
{
    "Table":[ "order","o"],
    "LeftJoin01": ["orderdetail", "d", [  "d.orderid",">","o.id"  ]],
    "Select":["o.id" ,["d.itemid","newitemid"]]
}

代码

代码语言:javascript
复制
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授权查询  

该功能目前还不完善,暂时不细解

代码语言:javascript
复制
var tableNames = jsonToSqlClient.GetTableNameList(json);//通过JSON获取JSON所有表
 var configs = GetConfigByUser(tableNames);//通过表获取行列过滤备注等信息
 
         var sqlList = jsonToSqlClient
            .Queryable(json)
            .UseAuthentication(configs)//查询启用行列过滤
            .ShowDesciption()//查询返回备注
            .ToResult();

2、插入  

单条插入

代码语言:javascript
复制
{
    "Table":"order",
      Columns:{name:"{string}:1",price:"{decimal}:1"}
}

批量插入

代码语言:javascript
复制
{
    "Table":"order",
        Columns:[ {name:"{string}:2",price:"{decimal}:2"} , {name:"{string}:1",price:"{decimal}:1"}  ]
}

带自增列

代码语言:javascript
复制
{
  "Table":"order",
      Identity:"id",
      Columns:  {name:"{string}:2",price:"{decimal}:2"} 
}

3、更新  

单个对象更新

代码语言:javascript
复制
{
    "Table":"order",
      Columns: { id:"{int}:1" ,name:"{string}:1" },
      WhereColumns:["id"]
}

多个对象更新

代码语言:javascript
复制
{
    "Table":"order",
      Columns:[ {id:2,name:"{string}:2",price:"{decimal}:2"}  , {id:1,name:"{string}:1",price:"{decimal}:1"}  ],
      WhereColumns:["id"]               
}

Sql语句方式更新

代码语言:javascript
复制
{
    "Table":"order",
      Columns: {name:"{string}:2",price:"{decimal}:2"}  ,
      Where:["id","=","{int}:11"]               
} 

4、删除 

Where中的用法和查询一样的

Json格式

代码语言:javascript
复制
{
    "Table":"order",
      Where:[ "id"," = ","{int}:1" ]
}

代码:

代码语言:javascript
复制
jsonToSqlClient.Deleteable(json).ToSqlList()
//DELETE FROM `order` WHERE `id` = @p0 

源码下载地址:

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

https://github.com/donet5/SqlSugar

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是JORM框架?
  • 为什么要开发JORM
  • SqlSugar 开始支持JORM
  • 创建JORM对象
  • 1、查询功能
    • 1.1 带有函数的查询
      • 2.2 带有条件的查询
        • 2.3 分页查询
          • 2.4分组查询
            • 2.6授权查询  
            • 2、插入  
            • 源码下载地址:
            相关产品与服务
            腾讯云微搭低代码
            微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。 支持打通企业内部数据,轻松实现企业微信管理、工作流、消息推送、用户权限等能力,实现企业内部系统管理。 连接微信生态,和微信支付、腾讯会议,腾讯文档等腾讯 SaaS 产品深度打通,支持原生小程序,助力企业内外部运营协同和营销管理。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档