用 Postman 做接口自动化(十五)xmysql 辅助操作 mysql 数据库(二)
目录,接上文
3.2 其他接口
3.2.1 查询多行
通过主键查询多行
GET /api/表名/bulk
GET http://127.0.0.1:3000/api/ecs_goods_type/bulk?_ids=4,5,6
3.2.2 添加多行
同时插入多行数据
POST /api/表名/bulk
以 json 方式构建请求报文
POST http://127.0.0.1:3000/api/ecs_goods_type/bulk
3.2.3 删除多行
同时删除多行。
DELETE /api/表名/bulk
DELETE http://127.0.0.1:3000/api/ecs_goods_type/bulk?_ids=10,11
3.2.4 过滤重复的行 distinct
GET /api/表名/distinct?_fields=列名
指定列名排除该列重复的行。
3.2.5 直接执行 SQL 语句
POST /dynamic
SQL 语句写在body中
可以通过 dynamic
接口,直接编写SQL语句。
但是此接口仅对 xmysql 服务在数据库服务器上启动有效,也就是说,参数 -h 必须指定 -h localhost
或者-h 127.0.0.1
。如果是通过 xmysql 远程访问数据库的话,是不能执行 SQL 语句的。
post 方法的 body 有两个字段:query
和 params
query: SQL 查询语句,或者是SQL 准备语句 (使用 ?? and ? 进行参数占位)
params : 与 SQL 准备语句配合起来使用,为 ?占位提供参数值
SQL 语句:
POST http://127.0.0.1:3000/dynamic
SQL 准备语句:
4. 条件
4.1 使用 Where 条件
我们在编写 SQL 语句时,会使用 where 条件来过滤。xmysql 也支持 where 条件,只是通过参数的方式实现的。
GET /api/表名?_where=(列名,条件运算符,值)
使用 _where
作为参数名后面的值为查询条件,查询条件括号中有三个值,分别是:列名
,条件运算符
比如大于、小于等,值
判断条件的值。
比如下面的例子:
GET http://172.31.18.163:3000/api/ecs_goods?_where=(shop_price, gt, 1000)
上面的例子,是从
ecs_goods
查询shop_price
大于1000
的商品。
详细的条件运算符:
eq - '=' - (colName,eq,colValue)
ne - '!=' - (colName,ne,colValue)
gt - '>' - (colName,gt,colValue)
gte - '>=' - (colName,gte,colValue)
lt - '<' - (colName,lt,colValue)
lte - '<=' - (colName,lte,colValue)
is - 'is' - (colName,is,true/false/null)
in - 'in' - (colName,in,val1,val2,val3,val4)
bw - 'between' - (colName,bw,val1,val2)
like - 'like' - (colName,like,~name~) note: 使用 ~ 代替 %
nlike - 'not like' - (colName,nlike,~name~) note: 使用 ~ 代替 %
另外还有逻辑运算符:
~or - 'or'
~and - 'and'
~xor - 'xor'
举个例子,查询 shop_price
大于 1000 ,并且goods_name
以诺基亚
开头。
GET http://172.31.18.163:3000/api/ecs_goods?_where=(shop_price,gt,1000)~and(goods_name,like,诺基亚~)
4.2 使用 fields 指定结果列
由于ecs_goods
表字段太多,影响我们对结果的查询和使用。在 SQL 语句中,我们可以指定结果中的列。 Xmysql 中,也可以通过 _fields
字段指定结果中的列。
以上面的例子为例。
GET http://172.31.18.163:3000/api/ecs_goods?_where=(shop_price,gt,1000)&_fields=goods_id,goods_name,shop_price
查询
shop_price
大于1000
的商品,只查看 goods_id,goods_name,shop_price 三个字段。
4.3 指定不显示的列
如果你想某字段不在结果中展示,可以在字段名前加负号来指定不展示的列。
GET http://172.31.18.163:3000/api/ecs_goods?_fields=-goods_name
比如不想在结果中展示
goods_name
,只需要在前面加一个负号即可。
5. 分页
如果查询结果的条数特别多,则需要分页查看。
分页主要使用两个参数
_p 指定显示的页数,页数会根据查询到的数量除以_size
_size 指定返回的行数
GET 请求默认只返回表中的 20 条记录,并且最大返回记录为 100 条。
通过设置 _size 可以改变查询记录的条数。最大只能返回 100 条。
如果设置的条数大于100,则只会返回100条;
如果设置的条数小于等于0,则会返回默认的20条。
GET http://127.0.0.1:3000/api/ecs_goods?_size=15&_p=3&_fields=goods_id,goods_name
6. 排序
排序通过 _sort
关键字指定排序的字段即可。如果要按倒序排,则在字段前加 负号。
正序 ASC:
GET http://127.0.0.1:3000/api/ecs_goods?_fields=goods_id,goods_name&_sort=goods_id
倒序 DESC
GET http://127.0.0.1:3000/api/ecs_goods?_fields=goods_id,goods_name&_sort=-goods_id
注意:字段名前面加
-
负号。
多重排序
可以多列结合起来排序,用逗号分隔即可。
GET http://127.0.0.1:3000/api/ecs_goods?_fields=goods_id,goods_name,shop_price&_sort=shop_price,-goods_id
8. 聚合
8.1 GroupBy 分组
Xmysql 中只支持聚合函数的 count 函数。所以我们只能分组统计条数。类似这样的 SQL 语句:
-- 根据品牌分组,查看每个品牌包含的商品数量
select brand_id, count(*) as _count from ecs_goods group by brand_id
通过 Xmysql 实现的话,可以通过 groupby
接口进行分组查询,通过内置的参数_fields
指定分组的字段。
GET /api/表名/groupby?_fields=分组的字段
GET http://127.0.0.1:3000/api/ecs_goods/groupby?_fields=brand_id
还有一种 ugroupby 接口,同样是分组统计,只是返回的结果格式不一样,对比一下。
GET http://127.0.0.1:3000/api/ecs_goods/ugroupby?_fields=brand_id
接下来是使用 having 了,SQL 语句如下:
select brand_id, count(*) as _count from ecs_goods group by brand_id having _count>2
8.2 having 筛选
加上_having
参数,就可以实现聚合函数筛选
_having
参数后面的值中跟随的值分别是 (聚合函数, 条件运算符,值)注意:根据官方文档,目前只支持 count 函数,用
_count
表示
GET http://127.0.0.1:3000/api/ecs_goods/groupby?_fields=brand_id&_having=(_count,gt,2)
[
8.3 其他聚合函数
其他聚合函数,比如 avg 求平均, min最小值,max最大值,sum求和,stddev标准差,variance方差。都是由一个接口aggregate
构成。
用法为指定一个数字类型的字段,一次性得出这些聚合函数的计算结果。
GET /api/表名/aggregate?_fields=数值型字段
比如对于商品表,指定聚合计算shop_price
:
http://127.0.0.1:3000/api/ecs_goods/aggregate?_fields=shop_price