mysql接口大全_MySql数据库列表数据分页查询、全文检索API零代码实现

数据条件查询和分页

前面文档主要介绍了元数据配置,包括表单定义和表关系管理,以及表单数据的录入,本文主要介绍数据查询和分页在crudapi中的实现。

概要

数据查询API

数据查询主要是指按照输入条件检索出符合要求的数据列表,如果数据量大的情况下,需要考虑分页。

ec38cf19878a4f8e6be2778ed4c1aefc.png API为/api/business/{name},其中name为对象名称复数形式(兼容对象名称),查询参数如下:

参数

类型

描述

select

string

选择查询需要的字段和关联子表,默认查询全部字段和关联子表

expand

string

选择需要展开的关联主表,默认关联主表字段只查询id和name

search

string

全文检索关键字,通过内置的系统字段全文索引fullTextBody实现

filter

string

智能查询条件,格式为Condition对象JSON序列化后的字符串

orderby

string

排序方式,ASC和DESC

offset

int32

分页开始位置

limit

int32

每页数量

字段1

Object

最终转换成mysql中=操作符

字段2

Object

最终转换成mysql中=操作符

......

Object

最终转换成mysql中=操作符

字段1,字段2,...之间的关系为并且AND关系

查询客户

字段查询

645b39a87a554cc149de19ba4a036d78.png 客户customer一共录入四条数据

全文检索

d48c7282b45c6d64e5ea255b7687b2ff.png 通过关键字“刘”对客户表全文检索,请求url如下: https://demo.crudapi.cn/api/business/customer?offset=0&limit=10&search=刘

查到客户刘禅和刘备,具体原理如下:表单中所启用了“可查询”属性的字段最终拼接成一个全文检索文本fullTextBody,在插入数据和更新数据的时候及时更新,这样就可以利用mysql全文检索功能实现关键字查询, 最终转成SQL语句如下:

SELECT * FROM `ca_customer`

WHERE ((MATCH(`fullTextBody`) AGAINST('张*' IN BOOLEAN MODE)))

ORDER BY id DESC LIMIT 0, 10

8cb1f28157e3fed2529a09aa050fe0a9.png 类似的,通过关键字“liu”对客户表全文检索,通过邮箱匹配,也可以查询数据。

智能查询原理

定义接口条件Condition,叶子条件LeafCondition继承Condition,组合条件CompositeCondition条件继承Condition,CompositeCondition由多个Condition组合而成,通过AND和OR两种运算可以实现任何形式的复杂查询条件,这样就利用组合模式实现了智能查询,

public enum OperatorTypeEnum {

EQ,

NE,

LIKE,

IN,

INSELECT,

SEARCH,

GE,

GT,

LE,

LT,

BETWEEN

}

数据库查询操作符包括等于、大于、LIKE等

@JsonPropertyOrder(alphabetic = true)

@JsonIgnoreProperties(ignoreUnknown = true)

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY,property = "name")

@JsonSubTypes(value = {

@JsonSubTypes.Type(value = CompositeCondition.class, name = "C"),

@JsonSubTypes.Type(value = LeafCondition.class, name = "L")

})

public interface Condition {

String toQuerySql();

List toQueryValues();

}

条件接口

@JsonPropertyOrder(alphabetic = true)

@JsonIgnoreProperties(ignoreUnknown = true)

@Data

public class LeafCondition implements Condition {

private String name = "L";

private String columnName;

@JsonProperty("operatorType")

private OperatorTypeEnum operatorType;

@JsonProperty("values")

private List valueList = new ArrayList();

}

叶子条件

@JsonPropertyOrder(alphabetic = true)

@JsonIgnoreProperties(ignoreUnknown = true)

@Data

public class CompositeCondition implements Condition {

private String name = "C";

@JsonProperty("conditionType")

private ConditionTypeEnum conditionType = ConditionTypeEnum.AND;

@JsonProperty("conditions")

private List conditionList = new ArrayList();

}

组合条件

智能查询验证

Postman验证,首先沟通mobile等于13622228888的叶子条件如下:

{

"name": "L",

"columnName": "mobile"

"operatorType": "EQ",

"values": ["13622228888"]

}

序列化值为:

{"name":"L","columnName":"mobile","operatorType":"EQ","values":["13622228888"]}

通过encodeURIComponent编码之后为:

%7B%22name%22%3A%22L%22%2C%22columnName%22%3A%22mobile%22%2C%22operatorType%22%3A%22EQ%22%2C%22values%22%3A%5B%2213622228888%22%5D%7D

be4c7c59b9eaa982d5c0ec2b4d9f4763.png 最终查询到客户关羽,因为手机号满足条件。类似的,可以构造更复杂的组合条件。

字段选择select

2d261b732dda0d8144037738d1af8dc8.png 默认情况下会选择所有字段,select如果不指定表示所有的意思

df72ef4e2135dbe62f877e51def04010.png 如果指定了字段,就查询部分字段,比如只查询id,name和mobile,其它字段和子表profile就不需要查询了,这样可以节约时间和数据大小。

关联表扩展expand

ae7cb16de35594a77c2ce09c2a86c86b.png 子主关系中,默认只查询主表id和name,避免主表查询层次太深。

79a577d03e1a16a19e5e42c00fb3d958.png 如果指定expand关联对象名称,就查询主表所有字段,适用不需要延时加载的场景,比如查询客户资料时候一起查询客户customer完整信息。

小结

本文介绍了列表查询API所有的参数,包括智能查询、全文检索以及字段选择等。crudapi系统通过配置的方式实现了对象的查询和分页。

附demo演示

本系统属于产品级的零代码平台,不同于自动代码生成器,不需要生成Controller、Service、Repository、Entity等业务代码,程序运行起来就可以使用,真正0代码,可以覆盖基本的和业务无关的CRUD RESTful API。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值