This is an automated email from the ASF dual-hosted git repository.

zhangzicheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 46bb18095 [Task]api-doc add field and detail crud(#4029) (#4231)
46bb18095 is described below

commit 46bb180959e4986531629f1dfc0f1d2738074325
Author: 杨文杰 <[email protected]>
AuthorDate: Thu Dec 1 21:08:35 2022 +0800

    [Task]api-doc add field and detail crud(#4029) (#4231)
    
    * api-doc add field and detail crud
    
    * trigger ci
    
    * remove ext
---
 .../shenyu/admin/controller/DetailController.java  |  92 +++++
 .../shenyu/admin/controller/FieldController.java   |  91 +++++
 .../apache/shenyu/admin/mapper/DetailMapper.java   |  33 +-
 .../apache/shenyu/admin/mapper/FieldMapper.java    |  35 +-
 .../apache/shenyu/admin/model/dto/DetailDTO.java   | 337 ++++++++++++++++
 .../apache/shenyu/admin/model/dto/FieldDTO.java    | 425 ++++++++++++++++++++
 .../shenyu/admin/model/query/DetailQuery.java      | 121 ++++++
 .../shenyu/admin/model/query/FieldQuery.java       | 126 ++++++
 .../org/apache/shenyu/admin/model/vo/DetailVO.java | 352 +++++++++++++++++
 .../org/apache/shenyu/admin/model/vo/FieldVO.java  | 430 +++++++++++++++++++++
 .../apache/shenyu/admin/service/DetailService.java |  68 ++++
 .../apache/shenyu/admin/service/FieldService.java  |  69 ++++
 .../admin/service/impl/DetailServiceImpl.java      | 122 ++++++
 .../admin/service/impl/FieldServiceImpl.java       | 125 ++++++
 .../src/main/resources/mappers/detail-sqlmap.xml   |  57 ++-
 .../src/main/resources/mappers/field-sqlmap.xml    |  29 ++
 16 files changed, 2496 insertions(+), 16 deletions(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DetailController.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DetailController.java
new file mode 100644
index 000000000..6f20b5420
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DetailController.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.controller;
+
+import org.apache.shenyu.admin.model.dto.DetailDTO;
+import org.apache.shenyu.admin.model.page.PageParameter;
+import org.apache.shenyu.admin.model.query.DetailQuery;
+import org.apache.shenyu.admin.model.result.ShenyuAdminResult;
+import org.apache.shenyu.admin.service.DetailService;
+import org.apache.shenyu.admin.utils.ShenyuResultMessage;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Validated
+@RestController
+@RequestMapping("/detail")
+public class DetailController {
+    private final DetailService detailService;
+
+    public DetailController(final DetailService detailService) {
+        this.detailService = detailService;
+    }
+
+    /**
+     * create or update detailDTO.
+     *
+     * @param detailDTO detailDTO.
+     * @return {@linkplain ShenyuAdminResult}
+     */
+    @PostMapping("/insertOrUpdate")
+    public ShenyuAdminResult createOrUpdate(@Valid @RequestBody final 
DetailDTO detailDTO) {
+        return ShenyuAdminResult.success(ShenyuResultMessage.SUCCESS, 
detailService.createOrUpdate(detailDTO));
+    }
+
+    /**
+     * batch delete.
+     *
+     * @param ids ids
+     * @return {@linkplain ShenyuAdminResult}
+     */
+    @DeleteMapping("/batchDelete")
+    public ShenyuAdminResult batchDelete(@RequestBody @NotEmpty final 
List<@NotBlank String> ids) {
+        Integer deleteCount = detailService.deleteBatch(ids);
+        return ShenyuAdminResult.success(ShenyuResultMessage.DELETE_SUCCESS, 
deleteCount);
+    }
+
+    /**
+     * findPageByQuery.
+     *
+     * @param fieldValue  fieldValue
+     * @param valueDesc   valueDesc
+     * @param currentPage currentPage
+     * @param pageSize    pageSize
+     * @return ShenyuAdminResult
+     */
+    @GetMapping("/findPageByQuery")
+    public ShenyuAdminResult listByPage(final String fieldValue,
+                                        final String valueDesc,
+                                        @RequestParam @NotNull(message = 
"currentPage not null") final Integer currentPage,
+                                        @RequestParam @NotNull(message = 
"pageSize not null") final Integer pageSize) {
+        PageParameter pageParameter = new PageParameter(currentPage, pageSize);
+        return ShenyuAdminResult.success(ShenyuResultMessage.QUERY_SUCCESS, 
this.detailService.listByPage(new DetailQuery(fieldValue, valueDesc, 
pageParameter)));
+    }
+
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/FieldController.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/FieldController.java
new file mode 100644
index 000000000..0e29a9810
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/FieldController.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.controller;
+
+import org.apache.shenyu.admin.model.dto.FieldDTO;
+import org.apache.shenyu.admin.model.page.PageParameter;
+import org.apache.shenyu.admin.model.query.FieldQuery;
+import org.apache.shenyu.admin.model.result.ShenyuAdminResult;
+import org.apache.shenyu.admin.service.FieldService;
+import org.apache.shenyu.admin.utils.ShenyuResultMessage;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Validated
+@RestController
+@RequestMapping("/field")
+public class FieldController {
+    private final FieldService fieldService;
+
+    public FieldController(final FieldService fieldService) {
+        this.fieldService = fieldService;
+    }
+
+    /**
+     * create or update mockRequestRecord.
+     *
+     * @param fieldDTO fieldDTO.
+     * @return {@linkplain ShenyuAdminResult}
+     */
+    @PostMapping("/insertOrUpdate")
+    public ShenyuAdminResult createOrUpdate(@Valid @RequestBody final FieldDTO 
fieldDTO) {
+        return ShenyuAdminResult.success(ShenyuResultMessage.SUCCESS, 
fieldService.createOrUpdate(fieldDTO));
+    }
+
+    /**
+     * batch delete.
+     *
+     * @param ids ids
+     * @return {@linkplain ShenyuAdminResult}
+     */
+    @DeleteMapping("/batchDelete")
+    public ShenyuAdminResult batchDelete(@RequestBody @NotEmpty final 
List<@NotBlank String> ids) {
+        Integer deleteCount = fieldService.deleteBatch(ids);
+        return ShenyuAdminResult.success(ShenyuResultMessage.DELETE_SUCCESS, 
deleteCount);
+    }
+
+    /**
+     * findPageByQuery.
+     *
+     * @param name        name
+     * @param fieldDesc   fieldDesc
+     * @param currentPage currentPage
+     * @param pageSize    pageSize
+     * @return {@linkplain ShenyuAdminResult}
+     */
+    @GetMapping("/findPageByQuery")
+    public ShenyuAdminResult listByPage(final String name, final String 
fieldDesc,
+                                        @RequestParam @NotNull(message = 
"currentPage not null") final Integer currentPage,
+                                        @RequestParam @NotNull(message = 
"pageSize not null") final Integer pageSize) {
+        PageParameter pageParameter = new PageParameter(currentPage, pageSize);
+        return ShenyuAdminResult.success(ShenyuResultMessage.QUERY_SUCCESS, 
this.fieldService.listByPage(new FieldQuery(name, fieldDesc, pageParameter)));
+    }
+
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DetailMapper.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DetailMapper.java
index 501850010..aeee838b2 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DetailMapper.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DetailMapper.java
@@ -18,10 +18,25 @@
 package org.apache.shenyu.admin.mapper;
 
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.shenyu.admin.model.entity.DetailDO;
+import org.apache.shenyu.admin.model.query.DetailQuery;
+import org.apache.shenyu.admin.validation.ExistProvider;
+
+import java.io.Serializable;
+import java.util.List;
 
 @Mapper
-public interface DetailMapper {
+public interface DetailMapper extends ExistProvider {
+
+    /**
+     * existed.
+     *
+     * @param id id
+     * @return existed
+     */
+    @Override
+    Boolean existed(@Param("id") Serializable id);
 
     /**
      * insert detailDO to table.
@@ -70,4 +85,20 @@ public interface DetailMapper {
      * @return deleteCount
      */
     int deleteByPrimaryKey(String id);
+
+    /**
+     * selectByQuery.
+     *
+     * @param detailQuery detailQuery
+     * @return DetailDOList
+     */
+    List<DetailDO> selectByQuery(DetailQuery detailQuery);
+
+    /**
+     * batchDelete.
+     *
+     * @param ids ids
+     * @return int
+     */
+    int batchDelete(@Param("ids") List<String> ids);
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/FieldMapper.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/FieldMapper.java
index 52ed23176..5b5b80b01 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/FieldMapper.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/FieldMapper.java
@@ -18,13 +18,28 @@
 package org.apache.shenyu.admin.mapper;
 
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.shenyu.admin.model.entity.FieldDO;
+import org.apache.shenyu.admin.model.query.FieldQuery;
+import org.apache.shenyu.admin.validation.ExistProvider;
+
+import java.io.Serializable;
+import java.util.List;
 
 /**
  * FieldMapper.
  */
 @Mapper
-public interface FieldMapper {
+public interface FieldMapper extends ExistProvider {
+
+    /**
+     * existed.
+     *
+     * @param id id
+     * @return existed
+     */
+    @Override
+    Boolean existed(@Param("id") Serializable id);
 
     /**
      * insert fieldDO to table.
@@ -73,4 +88,22 @@ public interface FieldMapper {
      * @return deleteCount
      */
     int deleteByPrimaryKey(String id);
+
+
+    /**
+     * batchDelete.
+     *
+     * @param ids ids
+     * @return int
+     */
+    int batchDelete(@Param("ids") List<String> ids);
+
+    /**
+     * selectByQuery.
+     *
+     * @param fieldQuery fieldQuery
+     * @return FieldDOList
+     */
+    List<FieldDO> selectByQuery(FieldQuery fieldQuery);
+
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DetailDTO.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DetailDTO.java
new file mode 100644
index 000000000..9659d564c
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/DetailDTO.java
@@ -0,0 +1,337 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.model.dto;
+
+import org.apache.shenyu.admin.mapper.DetailMapper;
+import org.apache.shenyu.admin.model.entity.DetailDO;
+import org.apache.shenyu.admin.validation.annotation.Existed;
+
+import java.sql.Timestamp;
+import java.util.Objects;
+
+public class DetailDTO {
+
+    private static final long serialVersionUID = 7247613164345326366L;
+
+    @Existed(provider = DetailMapper.class, nullOfIgnore = true, message = 
"detail is not existed")
+    private String id;
+
+    /**
+     * the field id.
+     */
+    private String fieldId;
+
+    /**
+     * is example.
+     */
+    private Boolean example;
+
+    /**
+     * field value.
+     */
+    private String fieldValue;
+
+    /**
+     * value desc.
+     */
+    private String valueDesc;
+
+    /**
+     * created time.
+     */
+    private Timestamp dateCreated;
+
+    /**
+     * updated time.
+     */
+    private Timestamp dateUpdated;
+
+    /**
+     * getId.
+     *
+     * @return id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * setId.
+     *
+     * @param id id
+     */
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * getFieldId.
+     *
+     * @return fieldId
+     */
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    /**
+     * set fieldId.
+     *
+     * @param fieldId fieldId
+     */
+    public void setFieldId(final String fieldId) {
+        this.fieldId = fieldId;
+    }
+
+    /**
+     * get Example.
+     *
+     * @return example
+     */
+    public Boolean getExample() {
+        return example;
+    }
+
+    /**
+     * set example.
+     *
+     * @param example example.
+     */
+    public void setExample(final Boolean example) {
+        this.example = example;
+    }
+
+    /**
+     * get fieldValue.
+     *
+     * @return fieldValue
+     */
+    public String getFieldValue() {
+        return fieldValue;
+    }
+
+    /**
+     * set fieldValue.
+     *
+     * @param fieldValue fieldValue
+     */
+    public void setFieldValue(final String fieldValue) {
+        this.fieldValue = fieldValue;
+    }
+
+    /**
+     * get valueDesc.
+     *
+     * @return valueDesc
+     */
+    public String getValueDesc() {
+        return valueDesc;
+    }
+
+    /**
+     * set valueDesc.
+     *
+     * @param valueDesc valueDesc
+     */
+    public void setValueDesc(final String valueDesc) {
+        this.valueDesc = valueDesc;
+    }
+
+    /**
+     * getDateCreated.
+     *
+     * @return Timestamp
+     */
+    public Timestamp getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * setDateCreated.
+     *
+     * @param dateCreated dateCreated
+     */
+    public void setDateCreated(final Timestamp dateCreated) {
+        this.dateCreated = dateCreated;
+    }
+
+    /**
+     * getDateUpdated.
+     *
+     * @return Timestamp
+     */
+    public Timestamp getDateUpdated() {
+        return dateUpdated;
+    }
+
+    /**
+     * setDateUpdated.
+     *
+     * @param dateUpdated dateUpdated
+     */
+    public void setDateUpdated(final Timestamp dateUpdated) {
+        this.dateUpdated = dateUpdated;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        DetailDTO detailDTO = (DetailDTO) o;
+        return Objects.equals(id, detailDTO.id)
+                && Objects.equals(fieldId, detailDTO.fieldId)
+                && Objects.equals(example, detailDTO.example)
+                && Objects.equals(fieldValue, detailDTO.fieldValue)
+                && Objects.equals(valueDesc, detailDTO.valueDesc)
+                && Objects.equals(dateCreated, detailDTO.dateCreated)
+                && Objects.equals(dateUpdated, detailDTO.dateUpdated);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, fieldId, example, fieldValue, valueDesc, 
dateCreated, dateUpdated);
+    }
+
+    /**
+     * builder.
+     *
+     * @return fieldDOBuilder
+     */
+    public static DetailDTO.DetailDTOBuilder builder() {
+        return new DetailDTO.DetailDTOBuilder();
+    }
+
+    public static final class DetailDTOBuilder {
+
+        private String id;
+
+        private String fieldId;
+
+        private Boolean example;
+
+        private String fieldValue;
+
+        private String valueDesc;
+
+        private Timestamp dateCreated;
+
+        private Timestamp dateUpdated;
+
+        private DetailDTOBuilder() {
+
+        }
+
+        /**
+         * id.
+         *
+         * @param id id
+         * @return DetailDOBuilder
+         */
+        public DetailDTO.DetailDTOBuilder id(final String id) {
+            this.id = id;
+            return this;
+        }
+
+        /**
+         * field id.
+         *
+         * @param fieldId fieldId
+         * @return DetailDOBuilder
+         */
+        public DetailDTO.DetailDTOBuilder fieldId(final String fieldId) {
+            this.fieldId = fieldId;
+            return this;
+        }
+
+        /**
+         * example.
+         *
+         * @param example fieldId
+         * @return DetailDOBuilder
+         */
+        public DetailDTO.DetailDTOBuilder example(final Boolean example) {
+            this.example = example;
+            return this;
+        }
+
+        /**
+         * fieldValue.
+         *
+         * @param fieldValue fieldValue
+         * @return DetailDOBuilder
+         */
+        public DetailDTO.DetailDTOBuilder fieldValue(final String fieldValue) {
+            this.fieldValue = fieldValue;
+            return this;
+        }
+
+        /**
+         * valueDesc.
+         *
+         * @param valueDesc valueDesc
+         * @return DetailDOBuilder
+         */
+        public DetailDTO.DetailDTOBuilder valueDesc(final String valueDesc) {
+            this.valueDesc = valueDesc;
+            return this;
+        }
+
+        /**
+         * dateCreated.
+         *
+         * @param dateCreated dateCreated
+         * @return DetailDOBuilder
+         */
+        public DetailDTO.DetailDTOBuilder dateCreated(final Timestamp 
dateCreated) {
+            this.dateCreated = dateCreated;
+            return this;
+        }
+
+        /**
+         * dateUpdated.
+         *
+         * @param dateUpdated dateUpdated
+         * @return DetailDOBuilder
+         */
+        public DetailDTO.DetailDTOBuilder dateUpdated(final Timestamp 
dateUpdated) {
+            this.dateUpdated = dateUpdated;
+            return this;
+        }
+
+        /**
+         * build.
+         *
+         * @return detailDO
+         */
+        public DetailDO build() {
+            DetailDO detailDO = new DetailDO();
+            detailDO.setId(this.id);
+            detailDO.setFieldId(this.fieldId);
+            detailDO.setExample(this.example);
+            detailDO.setFieldValue(this.fieldValue);
+            detailDO.setValueDesc(this.valueDesc);
+            detailDO.setDateCreated(this.dateCreated);
+            detailDO.setDateUpdated(this.dateUpdated);
+            return detailDO;
+        }
+
+    }
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/FieldDTO.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/FieldDTO.java
new file mode 100644
index 000000000..a193dad30
--- /dev/null
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/FieldDTO.java
@@ -0,0 +1,425 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.model.dto;
+
+import org.apache.shenyu.admin.mapper.FieldMapper;
+import org.apache.shenyu.admin.validation.annotation.Existed;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.Objects;
+
+/**
+ * field.
+ */
+public class FieldDTO implements Serializable {
+
+    private static final long serialVersionUID = 7476131236434536366L;
+
+    @Existed(provider = FieldMapper.class, nullOfIgnore = true, message = 
"filed is not existed")
+    private String id;
+
+    /**
+     * the model id.
+     */
+    @NotBlank
+    private String modelId;
+
+    /**
+     * the self model id.
+     */
+    @NotBlank
+    private String selfModelId;
+
+    /**
+     * the field name.
+     */
+    @NotBlank
+    private String name;
+
+    /**
+     * the field desc.
+     */
+    @NotBlank
+    private String fieldDesc;
+
+    /**
+     * the required whether to require (0 not required, 1 required).
+     */
+    @NotNull
+    private Boolean required;
+
+    /**
+     * the ext.
+     */
+    @NotBlank
+    private String ext;
+
+    /**
+     * created time.
+     */
+    private Timestamp dateCreated;
+
+    /**
+     * updated time.
+     */
+    private Timestamp dateUpdated;
+
+
+    /**
+     * getModelId.
+     *
+     * @return modelId
+     */
+    public String getModelId() {
+        return modelId;
+    }
+
+    /**
+     * set model id.
+     *
+     * @param modelId modelId
+     */
+    public void setModelId(final String modelId) {
+        this.modelId = modelId;
+    }
+
+    /**
+     * getSelfModelId.
+     *
+     * @return selfModeId
+     */
+    public String getSelfModelId() {
+        return selfModelId;
+    }
+
+    /**
+     * set self model id.
+     *
+     * @param selfModelId selfModelId
+     */
+    public void setSelfModelId(final String selfModelId) {
+        this.selfModelId = selfModelId;
+    }
+
+    /**
+     * getName.
+     *
+     * @return name
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name.
+     */
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    /**
+     * getFieldDesc.
+     *
+     * @return fieldDesc.
+     */
+    public String getFieldDesc() {
+        return fieldDesc;
+    }
+
+    /**
+     * set field desc.
+     *
+     * @param fieldDesc fieldDesc
+     */
+    public void setFieldDesc(final String fieldDesc) {
+        this.fieldDesc = fieldDesc;
+    }
+
+    /**
+     * getRequired.
+     *
+     * @return required
+     */
+    public Boolean getRequired() {
+        return required;
+    }
+
+    /**
+     * set required.
+     *
+     * @param required required
+     */
+    public void setRequired(final Boolean required) {
+        this.required = required;
+    }
+
+    /**
+     * getExt.
+     *
+     * @return ext
+     */
+    public String getExt() {
+        return ext;
+    }
+
+    /**
+     * getId.
+     *
+     * @return String
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * setId.
+     *
+     * @param id id
+     */
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * getDateCreated.
+     *
+     * @return Timestamp
+     */
+    public Timestamp getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * setDateCreated.
+     *
+     * @param dateCreated dateCreated
+     */
+    public void setDateCreated(final Timestamp dateCreated) {
+        this.dateCreated = dateCreated;
+    }
+
+    /**
+     * getDateUpdated.
+     *
+     * @return Timestamp
+     */
+    public Timestamp getDateUpdated() {
+        return dateUpdated;
+    }
+
+    /**
+     * setDateUpdated.
+     *
+     * @param dateUpdated dateUpdated
+     */
+    public void setDateUpdated(final Timestamp dateUpdated) {
+        this.dateUpdated = dateUpdated;
+    }
+
+    /**
+     * set ext.
+     *
+     * @param ext ext
+     */
+    public void setExt(final String ext) {
+        this.ext = ext;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        if (!super.equals(o)) {
+            return false;
+        }
+        FieldDTO fieldDO = (FieldDTO) o;
+        return Objects.equals(modelId, fieldDO.modelId)
+                && Objects.equals(selfModelId, fieldDO.selfModelId)
+                && Objects.equals(name, fieldDO.name)
+                && Objects.equals(fieldDesc, fieldDO.fieldDesc)
+                && Objects.equals(required, fieldDO.required)
+                && Objects.equals(ext, fieldDO.ext);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(super.hashCode(), modelId, selfModelId, name, 
fieldDesc, required, ext);
+    }
+
+    /**
+     * builder.
+     *
+     * @return fieldDOBuilder
+     */
+    public static FieldDTO.FieldDTOBuilder builder() {
+        return new FieldDTO.FieldDTOBuilder();
+    }
+
+    public static final class FieldDTOBuilder {
+
+        private String id;
+
+        private String modelId;
+
+        private String selfModelId;
+
+        private String name;
+
+        private String fieldDesc;
+
+        private Boolean required;
+
+        private String ext;
+
+        private Timestamp dateCreated;
+
+        private Timestamp dateUpdated;
+
+        private FieldDTOBuilder() {
+
+        }
+
+        /**
+         * id.
+         *
+         * @param id id
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder id(final String id) {
+            this.id = id;
+            return this;
+        }
+
+        /**
+         * modelId.
+         *
+         * @param modelId modelId
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder modelId(final String modelId) {
+            this.modelId = modelId;
+            return this;
+        }
+
+        /**
+         * selfModelId.
+         *
+         * @param selfModelId selfModelId
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder selfModelId(final String selfModelId) {
+            this.selfModelId = selfModelId;
+            return this;
+        }
+
+        /**
+         * name.
+         *
+         * @param name name
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder name(final String name) {
+            this.name = name;
+            return this;
+        }
+
+        /**
+         * fieldDesc.
+         *
+         * @param fieldDesc fieldDesc
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder fieldDesc(final String fieldDesc) {
+            this.fieldDesc = fieldDesc;
+            return this;
+        }
+
+        /**
+         * required.
+         *
+         * @param required required
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder required(final Boolean required) {
+            this.required = required;
+            return this;
+        }
+
+        /**
+         * ext.
+         *
+         * @param ext ext
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder ext(final String ext) {
+            this.ext = ext;
+            return this;
+        }
+
+        /**
+         * dateCreated.
+         *
+         * @param dateCreated dateCreated
+         * @return FieldDOBuilders
+         */
+        public FieldDTO.FieldDTOBuilder dateCreated(final Timestamp 
dateCreated) {
+            this.dateCreated = dateCreated;
+            return this;
+        }
+
+        /**
+         * dateUpdated.
+         *
+         * @param dateUpdated dateUpdated
+         * @return FieldDOBuilder
+         */
+        public FieldDTO.FieldDTOBuilder dateUpdated(final Timestamp 
dateUpdated) {
+            this.dateUpdated = dateUpdated;
+            return this;
+        }
+
+        /**
+         * build.
+         *
+         * @return FieldDO
+         */
+        public FieldDTO build() {
+            FieldDTO fieldDO = new FieldDTO();
+            fieldDO.setId(this.id);
+            fieldDO.setModelId(this.modelId);
+            fieldDO.setSelfModelId(this.selfModelId);
+            fieldDO.setName(this.name);
+            fieldDO.setFieldDesc(this.fieldDesc);
+            fieldDO.setRequired(this.required);
+            fieldDO.setExt(this.ext);
+            fieldDO.setDateCreated(this.dateCreated);
+            fieldDO.setDateUpdated(this.dateUpdated);
+            return fieldDO;
+        }
+    }
+
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/DetailQuery.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/DetailQuery.java
new file mode 100644
index 000000000..d953b30f1
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/DetailQuery.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.model.query;
+
+import org.apache.shenyu.admin.model.page.PageParameter;
+
+import java.util.Objects;
+
+public class DetailQuery {
+
+
+    /**
+     * field value.
+     */
+    private String fieldValue;
+
+    /**
+     * value desc.
+     */
+    private String valueDesc;
+
+    /**
+     * pageParameter.
+     */
+    private PageParameter pageParameter;
+
+    public DetailQuery(final String fieldValue, final String valueDesc, final 
PageParameter pageParameter) {
+        this.fieldValue = fieldValue;
+        this.valueDesc = valueDesc;
+        this.pageParameter = pageParameter;
+    }
+
+    /**
+     * get fieldValue.
+     *
+     * @return fieldValue
+     */
+    public String getFieldValue() {
+        return fieldValue;
+    }
+
+    /**
+     * set fieldValue.
+     *
+     * @param fieldValue fieldValue
+     */
+    public void setFieldValue(final String fieldValue) {
+        this.fieldValue = fieldValue;
+    }
+
+    /**
+     * get valueDesc.
+     *
+     * @return valueDesc
+     */
+    public String getValueDesc() {
+        return valueDesc;
+    }
+
+    /**
+     * set valueDesc.
+     *
+     * @param valueDesc valueDesc
+     */
+    public void setValueDesc(final String valueDesc) {
+        this.valueDesc = valueDesc;
+    }
+
+
+    /**
+     * getPageParameter.
+     *
+     * @return PageParameter
+     */
+    public PageParameter getPageParameter() {
+        return pageParameter;
+    }
+
+    /**
+     * setPageParameter.
+     *
+     * @param pageParameter pageParameter
+     */
+    public void setPageParameter(final PageParameter pageParameter) {
+        this.pageParameter = pageParameter;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        DetailQuery that = (DetailQuery) o;
+        return Objects.equals(fieldValue, that.fieldValue)
+                && Objects.equals(valueDesc, that.valueDesc)
+                && Objects.equals(pageParameter, that.pageParameter);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(fieldValue, valueDesc, pageParameter);
+    }
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/FieldQuery.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/FieldQuery.java
new file mode 100644
index 000000000..3dd1896ca
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/query/FieldQuery.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.model.query;
+
+import org.apache.shenyu.admin.model.page.PageParameter;
+
+import java.util.Objects;
+
+public class FieldQuery {
+
+    /**
+     * the fieldName.
+     */
+    private String name;
+
+    /**
+     * the field desc.
+     */
+    private String fieldDesc;
+
+
+
+    /**
+     * page parameter.
+     */
+    private PageParameter pageParameter;
+
+    public FieldQuery(final String name, final String fieldDesc, final 
PageParameter pageParameter) {
+        this.name = name;
+        this.fieldDesc = fieldDesc;
+        this.pageParameter = pageParameter;
+    }
+
+    /**
+     * getName.
+     *
+     * @return name
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name.
+     */
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    /**
+     * getFieldDesc.
+     *
+     * @return fieldDesc.
+     */
+    public String getFieldDesc() {
+        return fieldDesc;
+    }
+
+    /**
+     * set field desc.
+     *
+     * @param fieldDesc fieldDesc
+     */
+    public void setFieldDesc(final String fieldDesc) {
+        this.fieldDesc = fieldDesc;
+    }
+
+
+
+    /**
+     * getPageParameter.
+     *
+     * @return PageParameter
+     */
+    public PageParameter getPageParameter() {
+        return pageParameter;
+    }
+
+    /**
+     * setPageParameter.
+     *
+     * @param pageParameter pageParameter
+     */
+    public void setPageParameter(final PageParameter pageParameter) {
+        this.pageParameter = pageParameter;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        if (!super.equals(o)) {
+            return false;
+        }
+        FieldQuery fieldDO = (FieldQuery) o;
+        return Objects.equals(name, fieldDO.name)
+                && Objects.equals(fieldDesc, fieldDO.fieldDesc);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(super.hashCode(), name, fieldDesc);
+    }
+
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DetailVO.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DetailVO.java
new file mode 100644
index 000000000..0ba1fb98f
--- /dev/null
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DetailVO.java
@@ -0,0 +1,352 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.model.vo;
+
+import org.apache.shenyu.admin.mapper.DetailMapper;
+import org.apache.shenyu.admin.model.entity.DetailDO;
+import org.apache.shenyu.admin.validation.annotation.Existed;
+
+import java.sql.Timestamp;
+import java.util.Objects;
+
+public class DetailVO {
+
+    @Existed(provider = DetailMapper.class, nullOfIgnore = true, message = 
"detail is not existed")
+    private String id;
+
+    /**
+     * the field id.
+     */
+    private String fieldId;
+
+    /**
+     * is example.
+     */
+    private Boolean example;
+
+    /**
+     * field value.
+     */
+    private String fieldValue;
+
+    /**
+     * value desc.
+     */
+    private String valueDesc;
+
+    /**
+     * created time.
+     */
+    private Timestamp dateCreated;
+
+    /**
+     * updated time.
+     */
+    private Timestamp dateUpdated;
+
+    /**
+     * getId.
+     *
+     * @return id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * setId.
+     *
+     * @param id id
+     */
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * getFieldId.
+     *
+     * @return fieldId
+     */
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    /**
+     * set fieldId.
+     *
+     * @param fieldId fieldId
+     */
+    public void setFieldId(final String fieldId) {
+        this.fieldId = fieldId;
+    }
+
+    /**
+     * get Example.
+     *
+     * @return example
+     */
+    public Boolean getExample() {
+        return example;
+    }
+
+    /**
+     * set example.
+     *
+     * @param example example.
+     */
+    public void setExample(final Boolean example) {
+        this.example = example;
+    }
+
+    /**
+     * get fieldValue.
+     *
+     * @return fieldValue
+     */
+    public String getFieldValue() {
+        return fieldValue;
+    }
+
+    /**
+     * set fieldValue.
+     *
+     * @param fieldValue fieldValue
+     */
+    public void setFieldValue(final String fieldValue) {
+        this.fieldValue = fieldValue;
+    }
+
+    /**
+     * get valueDesc.
+     *
+     * @return valueDesc
+     */
+    public String getValueDesc() {
+        return valueDesc;
+    }
+
+    /**
+     * set valueDesc.
+     *
+     * @param valueDesc valueDesc
+     */
+    public void setValueDesc(final String valueDesc) {
+        this.valueDesc = valueDesc;
+    }
+
+    /**
+     * getDateCreated.
+     *
+     * @return Timestamp
+     */
+    public Timestamp getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * setDateCreated.
+     *
+     * @param dateCreated dateCreated
+     */
+    public void setDateCreated(final Timestamp dateCreated) {
+        this.dateCreated = dateCreated;
+    }
+
+    /**
+     * getDateUpdated.
+     *
+     * @return Timestamp
+     */
+    public Timestamp getDateUpdated() {
+        return dateUpdated;
+    }
+
+    /**
+     * setDateUpdated.
+     *
+     * @param dateUpdated dateUpdated
+     */
+    public void setDateUpdated(final Timestamp dateUpdated) {
+        this.dateUpdated = dateUpdated;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        DetailVO detailDTO = (DetailVO) o;
+        return Objects.equals(id, detailDTO.id)
+                && Objects.equals(fieldId, detailDTO.fieldId)
+                && Objects.equals(example, detailDTO.example)
+                && Objects.equals(fieldValue, detailDTO.fieldValue)
+                && Objects.equals(valueDesc, detailDTO.valueDesc)
+                && Objects.equals(dateCreated, detailDTO.dateCreated)
+                && Objects.equals(dateUpdated, detailDTO.dateUpdated);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, fieldId, example, fieldValue, valueDesc, 
dateCreated, dateUpdated);
+    }
+
+    /**
+     * builder.
+     *
+     * @return fieldDOBuilder
+     */
+    public static DetailVO.DetailVOBuilder builder() {
+        return new DetailVO.DetailVOBuilder();
+    }
+
+    /**
+     * buildDetailVO.
+     *
+     * @param detailDO detailDO
+     * @return DetailVO
+     */
+    public static DetailVO buildDetailVO(final DetailDO detailDO) {
+        return DetailVO.builder().id(detailDO.getId())
+                .example(detailDO.getExample())
+                .valueDesc(detailDO.getValueDesc())
+                .fieldValue(detailDO.getFieldValue())
+                .fieldId(detailDO.getFieldId())
+                .dateUpdated(detailDO.getDateUpdated())
+                .dateCreated(detailDO.getDateCreated())
+                .build();
+    }
+
+    public static final class DetailVOBuilder {
+
+        private String id;
+
+        private String fieldId;
+
+        private Boolean example;
+
+        private String fieldValue;
+
+        private String valueDesc;
+
+        private Timestamp dateCreated;
+
+        private Timestamp dateUpdated;
+
+        private DetailVOBuilder() {
+
+        }
+
+        /**
+         * id.
+         *
+         * @param id id
+         * @return DetailDOBuilder
+         */
+        public DetailVO.DetailVOBuilder id(final String id) {
+            this.id = id;
+            return this;
+        }
+
+        /**
+         * field id.
+         *
+         * @param fieldId fieldId
+         * @return DetailDOBuilder
+         */
+        public DetailVO.DetailVOBuilder fieldId(final String fieldId) {
+            this.fieldId = fieldId;
+            return this;
+        }
+
+        /**
+         * example.
+         *
+         * @param example fieldId
+         * @return DetailDOBuilder
+         */
+        public DetailVO.DetailVOBuilder example(final Boolean example) {
+            this.example = example;
+            return this;
+        }
+
+        /**
+         * fieldValue.
+         *
+         * @param fieldValue fieldValue
+         * @return DetailDOBuilder
+         */
+        public DetailVO.DetailVOBuilder fieldValue(final String fieldValue) {
+            this.fieldValue = fieldValue;
+            return this;
+        }
+
+        /**
+         * valueDesc.
+         *
+         * @param valueDesc valueDesc
+         * @return DetailDOBuilder
+         */
+        public DetailVO.DetailVOBuilder valueDesc(final String valueDesc) {
+            this.valueDesc = valueDesc;
+            return this;
+        }
+
+        /**
+         * dateCreated.
+         *
+         * @param dateCreated dateCreated
+         * @return DetailDOBuilder
+         */
+        public DetailVO.DetailVOBuilder dateCreated(final Timestamp 
dateCreated) {
+            this.dateCreated = dateCreated;
+            return this;
+        }
+
+        /**
+         * dateUpdated.
+         *
+         * @param dateUpdated dateUpdated
+         * @return DetailDOBuilder
+         */
+        public DetailVO.DetailVOBuilder dateUpdated(final Timestamp 
dateUpdated) {
+            this.dateUpdated = dateUpdated;
+            return this;
+        }
+
+        /**
+         * build.
+         *
+         * @return detailDO
+         */
+        public DetailVO build() {
+            DetailVO detailVO = new DetailVO();
+            detailVO.setId(this.id);
+            detailVO.setFieldId(this.fieldId);
+            detailVO.setExample(this.example);
+            detailVO.setFieldValue(this.fieldValue);
+            detailVO.setValueDesc(this.valueDesc);
+            detailVO.setDateCreated(this.dateCreated);
+            detailVO.setDateUpdated(this.dateUpdated);
+            return detailVO;
+        }
+
+    }
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/FieldVO.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/FieldVO.java
new file mode 100644
index 000000000..13d384ced
--- /dev/null
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/FieldVO.java
@@ -0,0 +1,430 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.model.vo;
+
+import org.apache.shenyu.admin.model.entity.FieldDO;
+
+import java.sql.Timestamp;
+import java.util.Objects;
+
+public class FieldVO {
+
+    /**
+     * primary key.
+     */
+    private String id;
+
+    /**
+     * created time.
+     */
+    private Timestamp dateCreated;
+
+    /**
+     * updated time.
+     */
+    private Timestamp dateUpdated;
+
+    /**
+     * the model id.
+     */
+    private String modelId;
+
+    /**
+     * the self model id.
+     */
+    private String selfModelId;
+
+    /**
+     * the field name.
+     */
+    private String name;
+
+    /**
+     * the field desc.
+     */
+    private String fieldDesc;
+
+    /**
+     * the required whether to require (0 not required, 1 required).
+     */
+    private Boolean required;
+
+    /**
+     * the ext.
+     */
+    private String ext;
+
+    /**
+     * getModelId.
+     *
+     * @return modelId
+     */
+    public String getModelId() {
+        return modelId;
+    }
+
+    /**
+     * set model id.
+     *
+     * @param modelId modelId
+     */
+    public void setModelId(final String modelId) {
+        this.modelId = modelId;
+    }
+
+    /**
+     * getSelfModelId.
+     *
+     * @return selfModeId
+     */
+    public String getSelfModelId() {
+        return selfModelId;
+    }
+
+    /**
+     * set self model id.
+     *
+     * @param selfModelId selfModelId
+     */
+    public void setSelfModelId(final String selfModelId) {
+        this.selfModelId = selfModelId;
+    }
+
+    /**
+     * getName.
+     *
+     * @return name
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name.
+     */
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    /**
+     * getFieldDesc.
+     *
+     * @return fieldDesc.
+     */
+    public String getFieldDesc() {
+        return fieldDesc;
+    }
+
+    /**
+     * set field desc.
+     *
+     * @param fieldDesc fieldDesc
+     */
+    public void setFieldDesc(final String fieldDesc) {
+        this.fieldDesc = fieldDesc;
+    }
+
+    /**
+     * getRequired.
+     *
+     * @return required
+     */
+    public Boolean getRequired() {
+        return required;
+    }
+
+    /**
+     * set required.
+     *
+     * @param required required
+     */
+    public void setRequired(final Boolean required) {
+        this.required = required;
+    }
+
+    /**
+     * getExt.
+     *
+     * @return ext
+     */
+    public String getExt() {
+        return ext;
+    }
+
+    /**
+     * set ext.
+     *
+     * @param ext ext
+     */
+    public void setExt(final String ext) {
+        this.ext = ext;
+    }
+
+
+    /**
+     * getId.
+     *
+     * @return id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * setId.
+     *
+     * @param id id
+     */
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * getDateCreated.
+     *
+     * @return dateCreated
+     */
+    public Timestamp getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * setDateCreated.
+     *
+     * @param dateCreated dateCreated
+     */
+    public void setDateCreated(final Timestamp dateCreated) {
+        this.dateCreated = dateCreated;
+    }
+
+    /**
+     * getDateUpdated.
+     *
+     * @return dateUpdated
+     */
+    public Timestamp getDateUpdated() {
+        return dateUpdated;
+    }
+
+    /**
+     * setDateUpdated.
+     *
+     * @param dateUpdated dateUpdated
+     */
+    public void setDateUpdated(final Timestamp dateUpdated) {
+        this.dateUpdated = dateUpdated;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        if (!super.equals(o)) {
+            return false;
+        }
+        FieldVO fieldDO = (FieldVO) o;
+        return Objects.equals(modelId, fieldDO.modelId)
+                && Objects.equals(selfModelId, fieldDO.selfModelId)
+                && Objects.equals(name, fieldDO.name)
+                && Objects.equals(fieldDesc, fieldDO.fieldDesc)
+                && Objects.equals(required, fieldDO.required)
+                && Objects.equals(ext, fieldDO.ext);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(super.hashCode(), modelId, selfModelId, name, 
fieldDesc, required, ext);
+    }
+
+    /**
+     * buildFieldVO.
+     *
+     * @param fieldDO fieldDO
+     * @return FieldVO
+     */
+    public static FieldVO buildFieldVO(final FieldDO fieldDO) {
+        return FieldVO.builder().id(fieldDO.getId())
+                .ext(fieldDO.getExt())
+                .fieldDesc(fieldDO.getFieldDesc())
+                .name(fieldDO.getName())
+                .modelId(fieldDO.getModelId())
+                .required(fieldDO.getRequired())
+                .selfModelId(fieldDO.getSelfModelId())
+                .dateUpdated(fieldDO.getDateUpdated())
+                .dateCreated(fieldDO.getDateCreated()).build();
+    }
+
+    /**
+     * builder.
+     *
+     * @return fieldDOBuilder
+     */
+    public static FieldVO.FieldVOBuilder builder() {
+        return new FieldVO.FieldVOBuilder();
+    }
+
+    public static final class FieldVOBuilder {
+
+        private String id;
+
+        private String modelId;
+
+        private String selfModelId;
+
+        private String name;
+
+        private String fieldDesc;
+
+        private Boolean required;
+
+        private String ext;
+
+        private Timestamp dateCreated;
+
+        private Timestamp dateUpdated;
+
+        private FieldVOBuilder() {
+
+        }
+
+        /**
+         * id.
+         *
+         * @param id id
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder id(final String id) {
+            this.id = id;
+            return this;
+        }
+
+        /**
+         * modelId.
+         *
+         * @param modelId modelId
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder modelId(final String modelId) {
+            this.modelId = modelId;
+            return this;
+        }
+
+        /**
+         * selfModelId.
+         *
+         * @param selfModelId selfModelId
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder selfModelId(final String selfModelId) {
+            this.selfModelId = selfModelId;
+            return this;
+        }
+
+        /**
+         * name.
+         *
+         * @param name name
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder name(final String name) {
+            this.name = name;
+            return this;
+        }
+
+        /**
+         * fieldDesc.
+         *
+         * @param fieldDesc fieldDesc
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder fieldDesc(final String fieldDesc) {
+            this.fieldDesc = fieldDesc;
+            return this;
+        }
+
+        /**
+         * required.
+         *
+         * @param required required
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder required(final Boolean required) {
+            this.required = required;
+            return this;
+        }
+
+        /**
+         * ext.
+         *
+         * @param ext ext
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder ext(final String ext) {
+            this.ext = ext;
+            return this;
+        }
+
+        /**
+         * dateCreated.
+         *
+         * @param dateCreated dateCreated
+         * @return FieldDOBuilders
+         */
+        public FieldVO.FieldVOBuilder dateCreated(final Timestamp dateCreated) 
{
+            this.dateCreated = dateCreated;
+            return this;
+        }
+
+        /**
+         * dateUpdated.
+         *
+         * @param dateUpdated dateUpdated
+         * @return FieldDOBuilder
+         */
+        public FieldVO.FieldVOBuilder dateUpdated(final Timestamp dateUpdated) 
{
+            this.dateUpdated = dateUpdated;
+            return this;
+        }
+
+        /**
+         * build.
+         *
+         * @return FieldDO
+         */
+        public FieldVO build() {
+            FieldVO fieldDO = new FieldVO();
+            fieldDO.setId(this.id);
+            fieldDO.setModelId(this.modelId);
+            fieldDO.setSelfModelId(this.selfModelId);
+            fieldDO.setName(this.name);
+            fieldDO.setFieldDesc(this.fieldDesc);
+            fieldDO.setRequired(this.required);
+            fieldDO.setExt(this.ext);
+            fieldDO.setDateCreated(this.dateCreated);
+            fieldDO.setDateUpdated(this.dateUpdated);
+            return fieldDO;
+        }
+    }
+
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DetailService.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DetailService.java
new file mode 100644
index 000000000..4c8452b9b
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DetailService.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.service;
+
+import org.apache.shenyu.admin.model.dto.DetailDTO;
+import org.apache.shenyu.admin.model.page.CommonPager;
+import org.apache.shenyu.admin.model.query.DetailQuery;
+import org.apache.shenyu.admin.model.vo.DetailVO;
+
+import java.util.List;
+
+public interface DetailService {
+
+    /**
+     * Create or update string.
+     *
+     * @param apiDTO the api dto
+     * @return the string
+     */
+    int createOrUpdate(DetailDTO apiDTO);
+
+    /**
+     * Delete by id.
+     *
+     * @param id the id
+     * @return the string
+     */
+    int delete(String id);
+
+    /**
+     * deleteBatch by ids.
+     * @param ids ids.
+     * @return int
+     */
+    int deleteBatch(List<String> ids);
+
+    /**
+     * find api by id.
+     *
+     * @param id pk.
+     * @return {@linkplain DetailVO}
+     */
+    DetailVO findById(String id);
+
+    /**
+     * find page of api by query.
+     *
+     * @param apiQuery {@linkplain DetailQuery}
+     * @return {@linkplain CommonPager}
+     */
+    CommonPager<DetailVO> listByPage(DetailQuery apiQuery);
+
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/FieldService.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/FieldService.java
new file mode 100644
index 000000000..573dbac4a
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/FieldService.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.service;
+
+import org.apache.shenyu.admin.model.dto.FieldDTO;
+import org.apache.shenyu.admin.model.page.CommonPager;
+import org.apache.shenyu.admin.model.query.FieldQuery;
+import org.apache.shenyu.admin.model.vo.FieldVO;
+import org.apache.shenyu.admin.model.vo.PluginVO;
+
+import java.util.List;
+
+public interface FieldService {
+
+    /**
+     * Create or update string.
+     *
+     * @param apiDTO the api dto
+     * @return the string
+     */
+    int createOrUpdate(FieldDTO apiDTO);
+
+    /**
+     * Delete by id.
+     *
+     * @param id the id
+     * @return the string
+     */
+    int delete(String id);
+
+    /**
+     * deleteBatch by ids.
+     * @param ids ids.
+     * @return int
+     */
+    int deleteBatch(List<String> ids);
+
+    /**
+     * find api by id.
+     *
+     * @param id pk.
+     * @return {@linkplain PluginVO}
+     */
+    FieldVO findById(String id);
+
+    /**
+     * find page of api by query.
+     *
+     * @param apiQuery {@linkplain FieldQuery}
+     * @return {@linkplain CommonPager}
+     */
+    CommonPager<FieldVO> listByPage(FieldQuery apiQuery);
+
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DetailServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DetailServiceImpl.java
new file mode 100644
index 000000000..2d3ea27e3
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DetailServiceImpl.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.service.impl;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shenyu.admin.aspect.annotation.Pageable;
+import org.apache.shenyu.admin.mapper.DetailMapper;
+import org.apache.shenyu.admin.model.dto.DetailDTO;
+import org.apache.shenyu.admin.model.entity.DetailDO;
+import org.apache.shenyu.admin.model.page.CommonPager;
+import org.apache.shenyu.admin.model.page.PageResultUtils;
+import org.apache.shenyu.admin.model.query.DetailQuery;
+import org.apache.shenyu.admin.model.vo.DetailVO;
+import org.apache.shenyu.admin.service.DetailService;
+import org.apache.shenyu.common.utils.UUIDUtils;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class DetailServiceImpl implements DetailService {
+
+    private final DetailMapper detailMapper;
+
+    public DetailServiceImpl(final DetailMapper detailMapper) {
+        this.detailMapper = detailMapper;
+    }
+
+    @Override
+    public int createOrUpdate(final DetailDTO detailDTO) {
+        return StringUtils.isBlank(detailDTO.getId()) ? this.create(detailDTO) 
: this.update(detailDTO);
+    }
+
+    @Override
+    public int delete(final String id) {
+        return detailMapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public int deleteBatch(final List<String> ids) {
+        return detailMapper.batchDelete(ids);
+    }
+
+    @Override
+    public DetailVO findById(final String id) {
+        DetailDO detailDO = detailMapper.selectByPrimaryKey(id);
+        DetailVO.DetailVOBuilder builder = DetailVO.builder();
+        if (detailDO != null) {
+            builder.id(detailDO.getId())
+                    .example(detailDO.getExample())
+                    .valueDesc(detailDO.getValueDesc())
+                    .fieldValue(detailDO.getFieldValue())
+                    .fieldId(detailDO.getFieldId())
+                    .dateUpdated(detailDO.getDateUpdated())
+                    .dateCreated(detailDO.getDateCreated());
+        }
+        return builder.build();
+    }
+
+    @Override
+    @Pageable
+    public CommonPager<DetailVO> listByPage(final DetailQuery detailQuery) {
+        return PageResultUtils.result(detailQuery.getPageParameter(), () -> 
detailMapper.selectByQuery(detailQuery)
+                .stream()
+                .map(DetailVO::buildDetailVO)
+                .collect(Collectors.toList()));
+    }
+
+    private int create(final DetailDTO detailDTO) {
+        if (detailDTO == null) {
+            return 0;
+        }
+        Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+        DetailDO detailDO = DetailDO.builder()
+                .id(detailDTO.getId())
+                .example(detailDTO.getExample())
+                .valueDesc(detailDTO.getValueDesc())
+                .fieldValue(detailDTO.getFieldValue())
+                .fieldId(detailDTO.getFieldId())
+                .dateUpdated(currentTime)
+                .dateCreated(currentTime)
+                .build();
+        if (StringUtils.isEmpty(detailDO.getId())) {
+            detailDO.setId(UUIDUtils.getInstance().generateShortUuid());
+        }
+        return detailMapper.insert(detailDO);
+    }
+
+    private int update(final DetailDTO detailDTO) {
+        if (detailDTO == null || detailDTO.getId() == null) {
+            return 0;
+        }
+        Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+        DetailDO detailDO = DetailDO.builder()
+                .id(detailDTO.getId())
+                .example(detailDTO.getExample())
+                .valueDesc(detailDTO.getValueDesc())
+                .fieldValue(detailDTO.getFieldValue())
+                .fieldId(detailDTO.getFieldId())
+                .dateUpdated(currentTime)
+                .dateUpdated(currentTime)
+                .build();
+        return detailMapper.updateByPrimaryKeySelective(detailDO);
+    }
+}
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/FieldServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/FieldServiceImpl.java
new file mode 100644
index 000000000..dc4da3b5a
--- /dev/null
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/FieldServiceImpl.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.admin.service.impl;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shenyu.admin.aspect.annotation.Pageable;
+import org.apache.shenyu.admin.mapper.FieldMapper;
+import org.apache.shenyu.admin.model.dto.FieldDTO;
+import org.apache.shenyu.admin.model.entity.FieldDO;
+import org.apache.shenyu.admin.model.page.CommonPager;
+import org.apache.shenyu.admin.model.page.PageResultUtils;
+import org.apache.shenyu.admin.model.query.FieldQuery;
+import org.apache.shenyu.admin.model.vo.FieldVO;
+import org.apache.shenyu.admin.service.FieldService;
+import org.apache.shenyu.common.utils.UUIDUtils;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class FieldServiceImpl implements FieldService {
+
+    private final FieldMapper fieldMapper;
+
+    public FieldServiceImpl(final FieldMapper fieldMapper) {
+        this.fieldMapper = fieldMapper;
+    }
+
+    @Override
+    public int createOrUpdate(final FieldDTO fieldDTO) {
+        return StringUtils.isBlank(fieldDTO.getId()) ? this.create(fieldDTO) : 
this.update(fieldDTO);
+    }
+
+    @Override
+    public int delete(final String id) {
+        return fieldMapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public int deleteBatch(final List<String> ids) {
+        return fieldMapper.batchDelete(ids);
+    }
+
+    @Override
+    public FieldVO findById(final String id) {
+        FieldDO fieldDO = fieldMapper.selectByPrimaryKey(id);
+        FieldVO.FieldVOBuilder builder = FieldVO.builder();
+        if (fieldDO != null) {
+            builder.id(fieldDO.getId())
+                    .ext(fieldDO.getExt())
+                    .fieldDesc(fieldDO.getFieldDesc())
+                    .name(fieldDO.getName())
+                    .modelId(fieldDO.getModelId())
+                    .required(fieldDO.getRequired())
+                    .selfModelId(fieldDO.getSelfModelId())
+                    .dateUpdated(fieldDO.getDateUpdated())
+                    .dateCreated(fieldDO.getDateCreated());
+        }
+        return builder.build();
+    }
+
+    @Override
+    @Pageable
+    public CommonPager<FieldVO> listByPage(final FieldQuery fieldQuery) {
+        List<FieldDO> list = fieldMapper.selectByQuery(fieldQuery);
+        return PageResultUtils.result(fieldQuery.getPageParameter(), () -> 
list.stream().map(FieldVO::buildFieldVO).collect(Collectors.toList()));
+    }
+
+    private int create(final FieldDTO fieldDTO) {
+        if (fieldDTO == null) {
+            return 0;
+        }
+        Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+        FieldDO fieldDO = FieldDO.builder()
+                .id(fieldDTO.getId())
+                .ext(fieldDTO.getExt())
+                .fieldDesc(fieldDTO.getFieldDesc())
+                .name(fieldDTO.getName())
+                .modelId(fieldDTO.getModelId())
+                .required(fieldDTO.getRequired())
+                .selfModelId(fieldDTO.getSelfModelId())
+                .dateUpdated(currentTime)
+                .dateCreated(currentTime)
+                .build();
+        if (StringUtils.isEmpty(fieldDO.getId())) {
+            fieldDO.setId(UUIDUtils.getInstance().generateShortUuid());
+        }
+        return fieldMapper.insert(fieldDO);
+    }
+
+    private int update(final FieldDTO fieldDTO) {
+        if (fieldDTO == null || fieldDTO.getId() == null) {
+            return 0;
+        }
+        Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+        FieldDO fieldDO = FieldDO.builder()
+                .id(fieldDTO.getId())
+                .ext(fieldDTO.getExt())
+                .fieldDesc(fieldDTO.getFieldDesc())
+                .name(fieldDTO.getName())
+                .modelId(fieldDTO.getModelId())
+                .required(fieldDTO.getRequired())
+                .selfModelId(fieldDTO.getSelfModelId())
+                .dateUpdated(currentTime)
+                .build();
+        return fieldMapper.updateByPrimaryKeySelective(fieldDO);
+    }
+}
diff --git a/shenyu-admin/src/main/resources/mappers/detail-sqlmap.xml 
b/shenyu-admin/src/main/resources/mappers/detail-sqlmap.xml
index 91dbd9f5b..9b9ef7a1e 100644
--- a/shenyu-admin/src/main/resources/mappers/detail-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/detail-sqlmap.xml
@@ -39,23 +39,30 @@
         date_updated
     </sql>
 
+    <select id="existed" resultType="java.lang.Boolean">
+        SELECT true
+        FROM detail
+        WHERE id = #{id}
+        LIMIT 1
+    </select>
+
     <insert id="insert" 
parameterType="org.apache.shenyu.admin.model.entity.DetailDO">
         insert into detail (
-            id,
-            field_id,
-            is_example,
-            field_value,
-            value_desc,
-            date_created,
-            date_updated
+        id,
+        field_id,
+        is_example,
+        field_value,
+        value_desc,
+        date_created,
+        date_updated
         )values (
-            #{id, jdbcType=VARCHAR},
-            #{fieldId, jdbcType=VARCHAR},
-            #{example, jdbcType=TINYINT},
-            #{fieldValue, jdbcType=VARCHAR},
-            #{valueDesc, jdbcType=VARCHAR},
-            #{dateCreated, jdbcType=TIMESTAMP},
-            #{dateUpdated, jdbcType=TIMESTAMP}
+        #{id, jdbcType=VARCHAR},
+        #{fieldId, jdbcType=VARCHAR},
+        #{example, jdbcType=TINYINT},
+        #{fieldValue, jdbcType=VARCHAR},
+        #{valueDesc, jdbcType=VARCHAR},
+        #{dateCreated, jdbcType=TIMESTAMP},
+        #{dateUpdated, jdbcType=TIMESTAMP}
         )
     </insert>
 
@@ -142,6 +149,14 @@
         where id = #{id,jdbcType=VARCHAR}
     </update>
 
+    <delete id="batchDelete">
+        DELETE FROM detail
+        WHERE id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id, jdbcType=VARCHAR}
+        </foreach>
+    </delete>
+
     <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
         DELETE FROM detail
         WHERE id = #{id, jdbcType=VARCHAR}
@@ -154,4 +169,18 @@
         WHERE id = #{id, jdbcType=VARCHAR}
     </select>
 
+    <select id="selectByQuery" resultMap="BaseResultMap">
+        SElECT
+        <include refid="Base_Column_List"/>
+        FROM detail
+        <where>
+            <if test="fieldValue != null">
+                and field_value = #{fieldValue, jdbcType=VARCHAR}
+            </if>
+            <if test="valueDesc != null">
+                and value_desc = #{valueDesc, jdbcType=VARCHAR}
+            </if>
+        </where>
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/shenyu-admin/src/main/resources/mappers/field-sqlmap.xml 
b/shenyu-admin/src/main/resources/mappers/field-sqlmap.xml
index 078acf876..11d8c9ae0 100644
--- a/shenyu-admin/src/main/resources/mappers/field-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/field-sqlmap.xml
@@ -43,6 +43,13 @@
         date_updated
     </sql>
 
+    <select id="existed" resultType="java.lang.Boolean">
+        SELECT true
+        FROM field
+        WHERE id = #{id}
+        LIMIT 1
+    </select>
+
     <insert id="insert" 
parameterType="org.apache.shenyu.admin.model.entity.FieldDO">
         insert into field (
             id,
@@ -170,6 +177,14 @@
         where id = #{id,jdbcType=VARCHAR}
     </update>
 
+    <update id="batchDelete">
+        DELETE FROM field
+        WHERE id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id, jdbcType=VARCHAR}
+        </foreach>
+    </update>
+
     <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
         DELETE FROM field
         WHERE id = #{id, jdbcType=VARCHAR}
@@ -182,4 +197,18 @@
         WHERE id = #{id, jdbcType=VARCHAR}
     </select>
 
+    <select id="selectByQuery" resultMap="BaseResultMap">
+        SElECT
+        <include refid="Base_Column_List"/>
+        FROM field
+        <where>
+            <if test="name != null">
+              and  name = #{name, jdbcType=VARCHAR}
+            </if>
+            <if test="fieldDesc != null">
+                and field_desc = #{fieldDesc, jdbcType=VARCHAR}
+            </if>
+        </where>
+    </select>
+
 </mapper>
\ No newline at end of file

Reply via email to