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)@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