全称 :Json Object Relational Mapping ,它是通过JSON 对象 去实现数据库的一个关系映射 ,我理想中完整的JORM包含功能有
·1、表权授权
2、字段级别授权
3、查询返回备注
4、可以配置化
5、支持丰富的SQL语法
6、数据验证
7、JSON作为数据库中间语言支持多种数据库
我们都知道 ORM用起来非常舒服,都强类型,但是他的缺点很显
1、对动态操作支持比较弱 , 很多功能都要自个封装,很难支持到函数级别
2、不能支持列级别的过滤,比如A用户显示2列,B用户显示3列,像这种很难处理
3、无法动态构造,这就导致了无法很好的用在 工作流、低代码平台或者人工智能产品中,很多都是需要自个拼SQL,查询用Datable等
SqlSugar是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新
为提高本公司内部产品的开发效率,准备打造一款低代码平台,所以从2022年1月份已经开始设计和架构 支持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>
|
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`
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)
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
|
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
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`
|
该功能目前还不完善,暂时不细解
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();
|
单条插入
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" }
}
|
单个对象更新
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" ]
}
|
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