写点什么

MySql 数据库列表数据分页查询、全文检索 API 零代码实现

用户头像
crudapi
关注
发布于: 2021 年 04 月 02 日
MySql数据库列表数据分页查询、全文检索API零代码实现

数据条件查询和分页

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

概要

数据查询 API

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



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



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

查询客户

字段查询


客户 customer 一共录入四条数据



分别通过名称、手机、邮箱、会员卡号进行查询,请求 url 如下:https://demo.crudapi.cn/api/business/customer?offset=0&limit=10&name=刘禅 &mobile=13088889999&email=liushan@crudapi.cn&membershipNo=VIP000000004 查到客户刘禅

全文检索


通过关键字“刘”对客户表全文检索,请求 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
复制代码



类似的,通过关键字“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<Object> toQueryValues();}
复制代码


条件接口


@JsonPropertyOrder(alphabetic = true)@JsonIgnoreProperties(ignoreUnknown = true)@Datapublic class LeafCondition implements Condition {    private String name = "L";
private String columnName;
@JsonProperty("operatorType") private OperatorTypeEnum operatorType;
@JsonProperty("values") private List<Object> valueList = new ArrayList<Object>();}
复制代码


叶子条件


@JsonPropertyOrder(alphabetic = true)@JsonIgnoreProperties(ignoreUnknown = true)@Datapublic class CompositeCondition implements Condition {    private String name = "C";
@JsonProperty("conditionType") private ConditionTypeEnum conditionType = ConditionTypeEnum.AND;
@JsonProperty("conditions") private List<Condition> conditionList = new ArrayList<Condition>();}
复制代码


组合条件

智能查询验证

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
复制代码



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

字段选择 select


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



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

关联表扩展 expand


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



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

小结

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

附 demo 演示

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


官网地址:https://crudapi.cn


测试地址:https://demo.crudapi.cn/crudapi/login

发布于: 2021 年 04 月 02 日阅读数: 24
用户头像

crudapi

关注

crudapi是crud+api组合,表示增删改查接口 2019.06.19 加入

使用crudapi可以告别枯燥无味的增删改查代码,让您更加专注业务,节约大量成本,从而提高工作效率。crudapi的目标是让处理数据变得更简单!官网:https://crudapi.cn 演示:https://demo.crudapi.cn/crudapi/login

评论

发布
暂无评论
MySql数据库列表数据分页查询、全文检索API零代码实现