<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3772字,需瀏覽 8分鐘

           ·

          2021-02-27 11:53

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

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


          概要


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


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


          參數(shù)類型描述selectstring選擇查詢需要的字段和關(guān)聯(lián)子表,默認(rèn)查詢?nèi)孔侄魏完P(guān)聯(lián)子表expandstring選擇需要展開(kāi)的關(guān)聯(lián)主表,默認(rèn)關(guān)聯(lián)主表字段只查詢id和namesearchstring全文檢索關(guān)鍵字,通過(guò)內(nèi)置的系統(tǒng)字段全文索引fullTextBody實(shí)現(xiàn)filterstring智能查詢條件,格式為Condition對(duì)象JSON序列化后的字符串orderbystring排序方式,ASC和DESCoffsetint32分頁(yè)開(kāi)始位置limitint32每頁(yè)數(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?分別通過(guò)名稱、手機(jī)、郵箱、會(huì)員卡號(hào)進(jìn)行查詢,請(qǐng)求url如下: https://demo.crudapi.cn/api/business/customer?offset=0&limit=10&name=劉禪&mobile=13088889999&[email protected]&membershipNo=VIP000000004 查到客戶劉禪


          全文檢索


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

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


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

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


          智能查詢?cè)?/h5>


          定義接口條件Condition,葉子條件LeafCondition繼承Condition,組合條件CompositeCondition條件繼承Condition,CompositeCondition由多個(gè)Condition組合而成,通過(guò)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ù)庫(kù)查詢操作符包括等于、大于、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"]}
          

          通過(guò)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ī)號(hào)滿足條件。類似的,可以構(gòu)造更復(fù)雜的組合條件。

          #

          字段選擇select


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

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


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


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

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


          小結(jié)


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


          附demo演示


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

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


          測(cè)試地址:https://demo.crudapi.cn/crudapi/login



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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男人射美女,日韩欧美一区二区三区 | 超碰免费99 | 无码一区二区波多野结衣播放搜索 | 欧美一级爱 | 性受 XXXX黑人XYX性爽 |