4

.NET6 开源之JSON 2 SQL (JORM框架) - 果糖大数据科技

 1 year ago
source link: https://www.cnblogs.com/sunkaixuan/p/16393199.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

什么是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"
});<br>

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();
{
"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"
}

单个对象更新

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

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       群号:995692596

746906-20220620152342299-302489107.png

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK