关于javascript:MySql数据库列表数据分页查询和全文检索API零代码实现

5次阅读

共计 3134 个字符,预计需要花费 8 分钟才能阅读完成。

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

后面文档次要介绍了元数据配置,包含表单定义和表关系治理,以及表单数据的录入,本文次要介绍数据查问和分页在 crudapi 中的实现。

概要

数据查问 API

数据查问次要是指依照输出条件检索出符合要求的数据列表,如果数据量大的状况下,须要思考分页。

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 关系

查问客户

字段查问


客户 customer 一共录入四条数据


别离通过名称、手机、邮箱、会员卡号进行查问,申请 url 如下:
https://demo.crudapi.cn/api/b…
查到客户刘禅

全文检索


通过关键字“刘”对客户表全文检索,申请 url 如下:
https://demo.crudapi.cn/api/b…
查到客户刘禅和刘备,具体原理如下:表单中所启用了“可查问”属性的字段最终拼接成一个全文检索文本 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)
@Data
public 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)
@Data
public 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

正文完
 0