1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        MySql數(shù)據(jù)庫列表數(shù)據(jù)分頁查詢、全文檢索API零代碼實(shí)現(xiàn)

        共 3772字,需瀏覽 8分鐘

         ·

        2021-02-27 11:53

        數(shù)據(jù)條件查詢和分頁

        前面文檔主要介紹了元數(shù)據(jù)配置,包括表單定義和表關(guān)系管理,以及表單數(shù)據(jù)的錄入,本文主要介紹數(shù)據(jù)查詢和分頁在crudapi中的實(shí)現(xiàn)。


        概要


        數(shù)據(jù)查詢API


        數(shù)據(jù)查詢主要是指按照輸入條件檢索出符合要求的數(shù)據(jù)列表,如果數(shù)據(jù)量大的情況下,需要考慮分頁。?listapi?API為/api/business/{name},其中name為對象名稱復(fù)數(shù)形式(兼容對象名稱),查詢參數(shù)如下:


        參數(shù)類型描述selectstring選擇查詢需要的字段和關(guān)聯(lián)子表,默認(rèn)查詢?nèi)孔侄魏完P(guān)聯(lián)子表expandstring選擇需要展開的關(guān)聯(lián)主表,默認(rèn)關(guān)聯(lián)主表字段只查詢id和namesearchstring全文檢索關(guān)鍵字,通過內(nèi)置的系統(tǒng)字段全文索引fullTextBody實(shí)現(xiàn)filterstring智能查詢條件,格式為Condition對象JSON序列化后的字符串orderbystring排序方式,ASC和DESCoffsetint32分頁開始位置limitint32每頁數(shù)量字段1Object最終轉(zhuǎn)換成mysql中=操作符字段2Object最終轉(zhuǎn)換成mysql中=操作符......Object最終轉(zhuǎn)換成mysql中=操作符

        字段1,字段2,...之間的關(guān)系為并且AND關(guān)系


        查詢客戶


        字段查詢


        customerList?客戶customer一共錄入四條數(shù)據(jù)

        liushan?分別通過名稱、手機(jī)、郵箱、會員卡號進(jìn)行查詢,請求url如下: https://demo.crudapi.cn/api/business/customer?offset=0&limit=10&name=劉禪&mobile=13088889999&[email protected]&membershipNo=VIP000000004 查到客戶劉禪


        全文檢索


        liu?通過關(guān)鍵字“劉”對客戶表全文檢索,請求url如下: https://demo.crudapi.cn/api/business/customer?offset=0&limit=10&search=劉

        查到客戶劉禪和劉備,具體原理如下:表單中所啟用了“可查詢”屬性的字段最終拼接成一個全文檢索文本fullTextBody,在插入數(shù)據(jù)和更新數(shù)據(jù)的時候及時更新,這樣就可以利用mysql全文檢索功能實(shí)現(xiàn)關(guān)鍵字查詢, 最終轉(zhuǎn)成SQL語句如下:


        SELECT * FROM `ca_customer` 
        WHERE ((MATCH(`fullTextBody`) AGAINST('張*' IN BOOLEAN MODE))) 
        ORDER BY id DESC LIMIT 0, 10
        

        liu2?類似的,通過關(guān)鍵字“l(fā)iu”對客戶表全文檢索,通過郵箱匹配,也可以查詢數(shù)據(jù)。


        智能查詢原理


        定義接口條件Condition,葉子條件LeafCondition繼承Condition,組合條件CompositeCondition條件繼承Condition,CompositeCondition由多個Condition組合而成,通過AND和OR兩種運(yùn)算可以實(shí)現(xiàn)任何形式的復(fù)雜查詢條件,這樣就利用組合模式實(shí)現(xiàn)了智能查詢,


        public enum OperatorTypeEnum {
            EQ,
            NE,
            LIKE,
            IN,
            INSELECT,
            SEARCH,
            GE,
            GT,
            LE,
            LT,
            BETWEEN
        }
        

        數(shù)據(jù)庫查詢操作符包括等于、大于、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>();
        }
        

        組合條件

        #
        智能查詢驗(yàn)證


        Postman驗(yàn)證,首先溝通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?最終查詢到客戶關(guān)羽,因?yàn)槭謾C(jī)號滿足條件。類似的,可以構(gòu)造更復(fù)雜的組合條件。

        #

        字段選擇select


        select1?默認(rèn)情況下會選擇所有字段,select如果不指定表示所有的意思

        select2?如果指定了字段,就查詢部分字段,比如只查詢id,name和mobile,其它字段和子表profile就不需要查詢了,這樣可以節(jié)約時間和數(shù)據(jù)大小。


        關(guān)聯(lián)表擴(kuò)展expand


        expand1?子主關(guān)系中,默認(rèn)只查詢主表id和name,避免主表查詢層次太深。

        expand2?如果指定expand關(guān)聯(lián)對象名稱,就查詢主表所有字段,適用不需要延時加載的場景,比如查詢客戶資料時候一起查詢客戶customer完整信息。


        小結(jié)


        本文介紹了列表查詢API所有的參數(shù),包括智能查詢、全文檢索以及字段選擇等。crudapi系統(tǒng)通過配置的方式實(shí)現(xiàn)了對象的查詢和分頁。


        附demo演示


        本系統(tǒng)屬于產(chǎn)品級的零代碼平臺,不同于自動代碼生成器,不需要生成Controller、Service、Repository、Entity等業(yè)務(wù)代碼,程序運(yùn)行起來就可以使用,真正0代碼,可以覆蓋基本的和業(yè)務(wù)無關(guān)的CRUD RESTful API。

        官網(wǎng)地址:https://crudapi.cn


        測試地址:https://demo.crudapi.cn/crudapi/login



        瀏覽 73
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            玉女名器爽到娇喘不停小说 | 伦精品午夜一级婬片A片 | 舔女人逼逼 | 下面含精不许漏h | 精品香蕉久久久午夜福利 | 成人视频网站在线观看 | 舔女生下面的视频 | 国内一区二区在线观看 | 色婷丁香| 亚洲色婷婷五月 |