微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.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对象

1 2 3 4 5 6 7 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格式:

1 2 3 4 {  "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  带有条件的查询

1 2 3 4 5 {   "Table":"order",       Where:[  "name","=""{string}:xxx"  ],       Select:[ [{sqlFunc_AggregateMin:["id"]},"id"], [{sqlFunc_GetDate:[]},"Date"] ] }

代码

1 2 3 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格式:

1 2 3 4 5 {   "Table":"order",       PageNumber:"1",       PageSize:"100" }

代码: 

1 2 3 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格式:

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

代码:

1 2 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授权查询  

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

1 2 3 4 5 6 7 8 var tableNames = jsonTosqlClient.GetTableNameList(json);//通过JSON获取JSON所有表  var configs = GetConfigByUser(tableNames);//通过表获取行列过滤备注等信息            var sqlList = jsonTosqlClient             .Queryable(json)             .UseAuthentication(configs)//查询启用行列过滤             .ShowDesciption()//查询返回备注             .ToResult();

2、插入  

单条插入

1 2 3 4 5 {     "Table":"order",       Columns:{name:"{string}:1",price:"{decimal}:1"} }

批量持入

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

带自增列

1 2 3 4 5 {   "Table":"order",       Identity:"id",       Columns:  {name:"{string}:2",price:"{decimal}:2" }

  

3、更新  

单个对象更新

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

  

多个对象更新

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

  

sql语句方式更新

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

4、删除 

Where中的用法查询一样的

Json格式

1 2 3 4 5 {     "Table":"order",       Where:[ "id"," = ","{int}:1" ] }

代码:

1 2 jsonTosqlClient.Deleteable(json).TosqlList() //DELETE FROM `order` WHERE `id` = @p0

  

源码下载地址:

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

 https://github.com/donet5/SqlSugar       群号:995692596

 

 

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

  

 

转 https://www.cnblogs.com/sunkaixuan/p/16393199.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐