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

简介: 前面文档主要介绍了元数据配置,包括表单定义和表关系管理,以及表单数据的录入,本文主要介绍数据查询和分页在crudapi中的实现。数据查询主要是指按照输入条件检索出符合要求的数据列表,如果数据量大的情况下,需要考虑分页。

数据条件查询和分页

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

概要

数据查询API

数据查询主要是指按照输入条件检索出符合要求的数据列表,如果数据量大的情况下,需要考虑分页。
listapi
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关系

查询客户

字段查询

customerList
客户customer一共录入四条数据

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

全文检索

liu
通过关键字“刘”对客户表全文检索,请求url如下:
/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

liu2
类似的,通过关键字“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

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

字段选择select

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

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

关联表扩展expand

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

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

小结

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

附crudapi简介

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
11月前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
|
11月前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
11月前
|
JSON 监控 API
小红书笔记评论API:一键获取分层评论与用户互动数据
小红书笔记评论API可获取指定笔记的评论详情,包括内容、点赞数、评论者信息等,支持分页与身份认证,返回JSON格式数据,适用于舆情监控、用户行为分析等场景。
1488 1
|
11月前
|
JSON API 数据格式
淘宝拍立淘按图搜索API系列,json数据返回
淘宝拍立淘按图搜索API系列通过图像识别技术实现商品搜索功能,调用后返回的JSON数据包含商品标题、图片链接、价格、销量、相似度评分等核心字段,支持分页和详细商品信息展示。以下是该API接口返回的JSON数据示例及详细解析:
|
11月前
|
自然语言处理 监控 API
速卖通商品详情API秘籍!轻松获取SKU属性数据
速卖通商品详情API(aliexpress.item.get)支持通过编程获取商品标题、价格、SKU、库存、销量、物流模板、评价及店铺信息,适用于价格监控、选品分析等场景。接口支持多语言返回,采用AppKey+AppSecret+Token认证,需签名验证,确保安全调用。
|
11月前
|
XML JSON API
苏宁商品详情API秘籍!轻松获取商品详情数据
苏宁商品详情API基于RESTful架构,支持JSON/XML格式,通过AppKey、AppSecret与签名三重认证,结合OAuth 2.0实现安全调用。开发者可获取商品名称、价格、销量、库存、促销等实时数据,适用于电商分析与商业智能。接口强制使用HTTPS协议,支持POST/GET请求,统一采用UTF-8编码,确保数据传输安全可靠。
|
11月前
|
安全 API
亚马逊商品详情 API 秘籍!轻松获取 SKU 属性数据
亚马逊商品详情API是官方接口,通过ASIN获取商品标题、价格、库存、评价等50余项数据,支持多站点查询。包含Product Advertising API与MWS两类,分别用于商品信息获取和卖家店铺管理,采用AWS4-HMAC-SHA256认证,保障请求安全。
|
12月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
660 158
|
12月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
12月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1754 152

推荐镜像

更多