记录一下最近sv.db的完善

1. 让查询可以使用 json path

有时候我们会存储 json 到 db,也有时会只取json部分数据,或者通过json部分数据进行过滤

所以sv.db 也支持这些场景,(目前只有 db 实现,json的操作都是依靠db json 函数)

举例:

数据

a.ExecuteNonQuery("""
INSERT INTO Weather
(name, value)
VALUES ('Hello', '{"a":2}'),('A', '{"a":3,"c":[4,5,{"f":7}]}')
""");

然后配置字段允许json

 [Db(StaticInfo.Demo)]
[Table(nameof(Weather))]
public class Weather
{
[Select, Where, OrderBy]
public string Name { get; set; } [Select(Field = "Value"), Where, OrderBy, Column(IsJson = true)]
public string V { get; set; }
}

api 方法不用做额外的实现

[HttpGet]
public async Task<object> Selects()
{
return await this.QueryByParamsAsync<Weather>();
}

用户查询api 时就可以对json字段进行任意操作,比如

curl --location 'http://localhost:5259/weather?Fields=v,json(v,'$.a',vvva)&OrderBy=json(v,'$.a') asc&Where=json(v,'$.a') != 1'

结果

{
"totalCount": null,
"rows": [
{
"vvva": 2,
"v": "{\"a\":2}"
},
{
"vvva": 3,
"v": "{\"a\":3,\"c\":[4,5,{\"f\":7}]}"
}
]
}

ps:json 实现对应 db json 函数

db json 函数
SQLite json_extract
PostgreSQL jsonb_path_query_first
MySql json_unquote(json_extract())
sql server JSON_QUERY

2. 字段白名单验证

默认会对解析的statement结果进行字段验证,不通过的会返回 400

验证:

  • 不在字段配置的白名单范围
  • 不允许类似 1 = 1, 只能 field = 1
  • 未配置 json 字段不允许使用 json 函数

如需改变 验证逻辑或自行验证,可以通过 SelectStatementOptions 自行处理

public record class SelectStatementOptions
{
public bool AllowNotFoundFields { get; init; } = false;
public bool AllowNonStrictCondition { get; init; } = false;
public Action<Statement> Visiter { get; init; } = null;
}

3. swagger 生成

安装 swagger

<PackageReference Include="SV.Db.Sloth.Swagger" Version="0.0.2.3" />

swagger gen 配置 sv.db 方法

builder.Services.AddSwaggerGen(c =>
{
c.AddDbSwagger();
});

api 方法配置 swagger

[DbSwaggerByType(typeof(Weather))]
[HttpGet]
public async Task<object> Selects()
{
return await this.QueryByParamsAsync<Weather>();
}

只需配置这些,swagger 将为大家自动生成字段描述

4. 主要功能已完善,已发布 nuget

如想尝试,只需安装所需 package

<PackageReference Include="SV.Db.Sloth.Swagger" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.WebApi" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Analyzers" Version="0.0.2.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="SV.Db.Sloth.MSSql" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.MySql" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.PostgreSQL" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.Sqlite" Version="0.0.2.3" />

让查询可以使用 json path的更多相关文章

  1. JMeter 插件 Json Path 解析HTTP响应JSON数据

    一.基本简介 JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为JSON数据格式.JSON 简介,JSON 教程. JSON 已经成为数 ...

  2. JMeter 插件 Json Path 解析 HTTP 响应 JSON 数据(转)

    JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为 JSON 数据格式.JSON 简介,JSON 教程. JSON 已经成为数据交换格式 ...

  3. jmeter之--断言json响应&json path espressions的语法

    一.提取所需要断言的内容: 响应数据如下:加入需要提取id为90的值 { , "name" : "python", "url" : &quo ...

  4. 继续说一下openjson 以及 json path 的使用 (2)

    在openjson 里面,其实是可以把数据类型array里面的值遍历出来的,举个栗子 ) = N' {"name":"test", "obj" ...

  5. 【JEMTER】后置处理器JSON Path Extractor获取server端返回的json中某项值

    需求1:点击所有报表模板时,server端返回所有报表模板的ID(templateId),测试时需要下载某个模板生成的报表 需求2:点击单个报表模板时,server端返回这个报表模板下的所有报表ID( ...

  6. jmeter里json path postprocessor的用法

    后置处理器添加 json path postprocessor. 用处: 当前接口响应返回的json中提取内容,作为变量可以在不同的请求中传递. 如下,从登陆接口返回的json中提取user id,变 ...

  7. SQL FOR JSON PATH 返回 json

    --直接返回 age FOR JSON PATH --返回值 [{"name":"张学友","age":60}] select c1, c2 ...

  8. 查询返回JSON数据结果集

    查询返回JSON数据结果集 设计目标: 1)一次性可以返回N个数据表的JSON数据 2)跨数据库引擎 { "tables": [ { "cols": [ { & ...

  9. Jmeter 中JSON Path Extractor高级用法

    好久没玩jemter了,由于项目原因又重新拾起.在使用JSON Path Extractor(jmeter 4.0已经默认支持了,4.0以下要自行安装插件)时,可以进行条件过滤,不用再自行写shell ...

  10. JMeter----正则表达式&JSON Path Extractor

    最近在用JMerter给公司一个项目做性能测试,期间遇到要提取上一个接口返回的数据作为下个接口的请求.这里做下记录 如图所示,需要将“扫描二维码”接口请求的返回值中的data部分,作为“处理提交码值” ...

随机推荐

  1. 【Mybatis】14 缓存

    1.什么是缓存? - 缓存是指把经常需要读写的数据,保存到一个高速的缓冲区中,这个行为叫缓存 - 也可以是指被保存在高速缓冲区的数据,也叫缓存 2.Mybatis缓存 Mybatis中分为一级缓存和二 ...

  2. MyBatis-Plus文件上传方法

    网站的文件上传方法 本地存储上传 // 本地存储方式 MultipartFile接受文件 @PostMapping("/save") public Result save(Stri ...

  3. 【转载】 梯度的直观理解_谈谈优化算法之一(动量法、Nesterov法、自然梯度法)

    原文地址: https://blog.csdn.net/weixin_34613462/article/details/112333623 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...

  4. 面试官:说说volatile应用和实现原理?

    volatile 是并发编程中的重要关键字,它的名气甚至是可以与 synchronized.ReentrantLock 等齐名,也是属于并发编程五杰之一. 需要注意的是 volatile 并不能保证原 ...

  5. Dapr v1.14 版本已发布

    Dapr是一套开源.可移植的事件驱动型运行时,允许开发人员轻松立足云端与边缘位置运行弹性.微服务.无状态以及有状态等应用程序类型.Dapr能够确保开发人员专注于编写业务逻辑,而不必分神于解决分布式系统 ...

  6. MSI Afterburner 使用

    MSI Afterburner 是一款显卡超频软件,同时可以监测硬件运行数据(CPU 温度.GPU 温度.帧率.帧生成时间等).与其捆绑安装的 RivaTuner Statistics Server ...

  7. 【Git】之分支合并命令

    一.Git分支管理 1.查看Git分支 git branch 按Q键返回. 2.创建分支以及删除分支 git branch newtest git branch -d newtest 3.切换分支 g ...

  8. 一个故事讲解https

    1   序言 今天来聊一聊https 安全传输的原理. 在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎么还是你?!). 这俩哥们隔着千 ...

  9. 《linux实用指令积累》持续更新。。。

    一.远程服务器文件拷贝 1.1.scp scp /home/a.txt root@127.0.0.1:/home/ 1.2.sshpass(适用于脚本调用,直接指定密码) 1.2.1.安装sshpas ...

  10. elementUI的日期时间控件实现分钟固定步长

    日期时间控件实现固定步长,例如5分钟间隔.10分钟间隔 一.效果图 二.实现方法 通过日期时间控件的箭头来控制步长的显示与否,具体代码详见