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

 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.1  带有函数的查询

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"]

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

字段名:字母数字下划线 

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

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

2.3 分页查询

Json格式:

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

代码: 

var sqls=jsonToSqlClient.Queryable(json).ToSqlList()
//SELECT COUNT(1) FROM `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联表查询

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();

2、插入  

单条插入

                {
"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"}
}

  

3、更新  

单个对象更新

                {
"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"]
}

4、删除 

Where中的用法和查询一样的

Json格式

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

代码:

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

  

源码下载地址:

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

https://github.com/donet5/SqlSugar

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

  

  

.NET6 开源之JSON 2 SQL (JORM框架)的更多相关文章

  1. .NET Core/.NET5/.NET6 开源项目汇总6:框架与架构设计(DDD、云原生/微服务/容器/DevOps/CICD等)项目

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  2. CDIF: 基于JSON的SOA软件框架

    通用设备互联框架(CDIF)是一个具备中美知识产权保护的,基于web的连接框架,目前有部分开源实现存放在: GitHub - out4b/cdif: Common device interconnec ...

  3. CDIF:基于JSON的SOA软件框架

    通用设备互联框架(CDIF)是一个具备中美知识产权保护的,基于web的连接框架,目前有部分开源实现存放在: GitHub - out4b/cdif: Common device interconnec ...

  4. .NET Core/.NET5/.NET6 开源项目汇总4:CMS、Blog项目

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  5. .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目

    系列目录     [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...

  6. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

  7. 最全最新🇨🇳中国【省、市、区县、乡镇街道】json,csv,sql数据

    中华人民共和国行政区划代码 中华人民共和国行政区划(五级):省级.地级.县级.乡级和村级. 来自中华人民共和国民政部,用于查询中国省,市和区数据的网站. 中华人民共和国行政区划代码,更新时间:2019 ...

  8. .NET Core/.NET5/.NET6 开源项目汇总9:客户端跨平台UI框架

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 实现了跨平台,支持在 Windwos.Linux.macOS上开发与部署,但是也仅限于Web应用程序.对于Windows桌面 ...

  9. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 场景模拟 接上一篇, JD SKU对应的店铺信息是异步加载 ...

随机推荐

  1. MySQL 社区版

    MySQL 社区版 MySQL 社区版是全球广受欢迎的开源数据库的免费下载版本.它遵循 GPL 许可协议,由庞大.活跃的开源开发人员社区提供支持. MySQL 社区版包括: 可插拔的存储引擎架构 多种 ...

  2. Linux 开启远程访问

    系统:Ubuntu16.0 虚拟机 问题:Windows访问Ubun被拒绝 解决方法: 1.先检测是否安装SSH服务 1 sudo apt-get install ssh 2.编辑ssh配置文件 1 ...

  3. zabbix proxy cannot perform check now for itemid [xxxxx]: item is not in cache

    情况 接上次做完容器部署proxy后,为其添加host进行添加任务. 发现一直没有数据,就到item里面执行 execute now. 然后过了几分钟回来一看,还是没有. Emmm,看下log吧. S ...

  4. background 属性

    一.background 属性集 值 说明 background-color 指定要使用的背景颜色 background-position 指定背景图像的位置 background-size 指定背景 ...

  5. Math内置对象 常用的方法

    属性: Math.Pi 方法: Math.max()   最大值 Math.min()  最小值 Math.ceil()  向上取整 Math.floor() 向下取整 Math.random()   ...

  6. 关于IDEA中添加静态资源(html,jpg等)后找不到资源(404 not found),以及WEB-INF目录介绍

    关于静态资源的加载 在IDEA中的java web application(或者maven项目)添加新的静态资源时(如html,jpg,gif等),常常会遇到静态资源无法加载的情况.这样的情况我们一般 ...

  7. Electron结合React和TypeScript进行开发

    目录 结合React+TypeScript进行Electron开发 1. electron基本简介 为什么选择electron? 2. 快速上手 2.1 安装React(template为ts) 2. ...

  8. 尤娜故事-迷雾-springboot扮酷小技巧

    前情回顾 从前,有一个简单的通道系统叫尤娜-- 尤娜系统的第一次飞行中换引擎的架构垂直拆分改造 四种常用的微服务架构拆分方式 尤娜,我去面试了 正文 我回到日常的尤娜系统建设中,最近事情比较少,总有一 ...

  9. 『现学现忘』Git对象 — 15、blob对象介绍

    目录 (一)Git对象的存放目录 (二)Git中对象类型 (三)blob对象 1.blob对象说明 (1)blob对象定义 (2)blob对象说明 (3)blob对象存储的方式 (4)查看blob对象 ...

  10. 设置Linux系统的交叉编译环境

    1.在Linaro官网上获得交叉编译工具 网址:http://releases.linaro.org/components/toolchain/gcc-linaro/ 从Linaro官网上能找到4.9 ...