亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
985
2022-05-30
數據條件查詢和分頁
前面文檔主要介紹了元數據配置,包括表單定義和表關系管理,以及表單數據的錄入,本文主要介紹數據查詢和分頁在crudapi中的實現。
概要
數據查詢主要是指按照輸入條件檢索出符合要求的數據列表,如果數據量大的情況下,需要考慮分頁。
API為/api/business/{name},其中name為對象名稱復數形式(兼容對象名稱),查詢參數如下:
字段1,字段2,…之間的關系為并且AND關系
客戶customer一共錄入四條數據
分別通過名稱、手機、郵箱、會員卡號進行查詢,請求url如下:
/api/business/customer?offset=0&limit=10&name=劉禪&mobile=13088889999&email=liushan@crudapi.cn&membershipNo=VIP000000004
查到客戶劉禪
通過關鍵字“劉”對客戶表全文檢索,請求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
類似的,通過關鍵字“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
條件接口
@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
葉子條件
@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
組合條件
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
API Java MySQL Spring Boot 全文檢索
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。