.NET6 开源之JSON 2 SQL (JORM框架)
什么是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框架)的更多相关文章
- .NET Core/.NET5/.NET6 开源项目汇总6:框架与架构设计(DDD、云原生/微服务/容器/DevOps/CICD等)项目
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- CDIF: 基于JSON的SOA软件框架
通用设备互联框架(CDIF)是一个具备中美知识产权保护的,基于web的连接框架,目前有部分开源实现存放在: GitHub - out4b/cdif: Common device interconnec ...
- CDIF:基于JSON的SOA软件框架
通用设备互联框架(CDIF)是一个具备中美知识产权保护的,基于web的连接框架,目前有部分开源实现存放在: GitHub - out4b/cdif: Common device interconnec ...
- .NET Core/.NET5/.NET6 开源项目汇总4:CMS、Blog项目
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目
系列目录 [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...
- 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
基于python实现的http+json协议接口自动化测试框架(实用改进版) by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 目录 1. ...
- 最全最新🇨🇳中国【省、市、区县、乡镇街道】json,csv,sql数据
中华人民共和国行政区划代码 中华人民共和国行政区划(五级):省级.地级.县级.乡级和村级. 来自中华人民共和国民政部,用于查询中国省,市和区数据的网站. 中华人民共和国行政区划代码,更新时间:2019 ...
- .NET Core/.NET5/.NET6 开源项目汇总9:客户端跨平台UI框架
系列目录 [已更新最新开发文章,点击查看详细] .NET Core 实现了跨平台,支持在 Windwos.Linux.macOS上开发与部署,但是也仅限于Web应用程序.对于Windows桌面 ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 场景模拟 接上一篇, JD SKU对应的店铺信息是异步加载 ...
随机推荐
- Springboot集成cache的key生成策略
代码接上文:深度理解springboot集成redis缓存之源码解析 ## 1.使用SpEL表达式 @Cacheable(cacheNames = "emp",key = &quo ...
- spring-bean依赖注入-02(通过p命名空间注入)
上一篇博客讲述了为什么使用spring依赖注入,怎么注入,详见 spring-bean依赖注入-01(等你来点击) 废话不多说,开始使用p命名空间进行set注入 使用另外一种注入方式是这样的(具体实现 ...
- 解决k8s故障,eureka处于unknow的问题
//pod Unknown状态,开始强制删除eureka-server-node-0,eureka-server-node-1等,强制删除不了 [root@fp158 sts]# kubectl de ...
- 帝国CMS随机调用栏目
[e:loop={'select * from [!db.pre!]enewsclass where bclassid in(1) order by rand() desc limit 10',10, ...
- RESTFUL风格的接口命名规范
1.首先restfulf风格的api是基于资源的,url命名用来定位资源,而不是表示动作,动作通过请求方式进行表示. 2.URL中应该单复数区分,推荐的实践是永远只用复数.比如GET /api/use ...
- 2022.02.21 SA
2022.02.21 SA 当我年少轻狂时,我曾拥有自由,但我并不明白它的意义.我曾拥有时间,但我没有意识到它的珍贵.我曾拥有爱,但我从未用心去体会.数十年的时间考验后,我终于理解了三者的真谛. 我已 ...
- Revit二次开发之创建风管
在Revit中,风管用于连接管件,风道末端和机械设备,今天简单尝试了下使用RevitAPI创建风管,现分享下我的方法. 风管从类型上可分为三类:一般风管,软风管和风管占位符:从形状上也分为三类 ...
- Ansible Notes: module: get_facts
功能:用来获取remote host的facts 它是一个非常基础的模块[1],playbook里面可以直接当关键字用gather_facts: False 执行set_up模块时自动调用get_fa ...
- 雪花算法生成分布式ID
分布式主键ID生成方案 分布式主键ID的生成方案有以下几种: 数据库自增主键 缺点: 导入旧数据时,可能会ID重复,导致导入失败 分布式架构,多个Mysql实例可能会导致ID重复 UUID 缺点: 占 ...
- centos7系统安装 VMware
安装版本: CentOS-7-x86_64-DVD-2009.iso 下载地址:阿里巴巴开源镜像 第一步:打开虚拟机,新建虚拟机引导,选择高级,下一步. 第二步:默认下一步 第三步:选择最后一项, ...