# api-mediator **Repository Path**: suwensen/api-mediator ## Basic Information - **Project Name**: api-mediator - **Description**: 基于 Springboot 的 API 服务脚手架 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-03-10 - **Last Updated**: 2025-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **## Getting started # SpringBoot+MyBatis codeless DSL Query Framework 🚀 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.x-brightgreen)](https://spring.io/projects/spring-boot) [![MyBatis](https://img.shields.io/badge/MyBatis-3.5-blue)](https://mybatis.org/mybatis-3/) 一个基于Spring Boot + MyBatis的声明式低代码查询框架,通过结构化DSL实现低代码**零SQL**的复杂数据查询。 ## 🌟 核心特性 - **📦 即插即用**:5分钟快速集成!!! - **🔍 智能解析**:支持GET/POST参数生成的DSL转换为动态SQL!!! - **🛡️ 安全防护**:内置SQL防注入机制!!! - **🌐 多库兼容**:无缝兼容MyBatis支持所有数据库!!! - **🧩 可扩展**:可自定义操作符与查询逻辑!!! ## 🌟 DSL语法简要 ### 请求参数 | 参数名称 | 类型 |是否必需| 描述 | |-----------------|---------------------|---|----------------------------------------| | **pageNumber** | Integer |False| 显示数据的页码,默认为1,取值范围:[1,∞),用于查询列表的接口 | | **pageSize** | Integer |False| 每页显示的数据条数,默认为10,取值范围:[1,100],用于查询列表的接口 | | **searchColumns** | String |False| 搜索列名(多个参数逗号分隔) | | **keyword** | String |False| 搜索关键字 | | **orderFields** | String |False| 排序字段(多个参数逗号分隔) | | **orderBy** | String |False| 排序关键字(只支持DESC/ASC)参数如果错误的话,默认DESC | | **filters** | [Filter[]](#Filter) |False| 过滤参数过滤器:支持多种过滤,各个参数之间的关系为“与”(and) | ###
Filter
|名称| 类型 |是否必需| 描述 | |---|---------------------------|---|------------------------------| |**name**| String |True| 过滤条件的字段名称(必须与数据库表映射的实体字段名一致) | |**operator**| [Operator](#Operator) |False| 过滤条件的操作符,默认EQ | |**values**| Object[] |True| 过滤条件的值 | ###
Operator清单
#### 1. 基础比较操作符 | 枚举名称 | 运算符 | 说明 | |--------------|--------|-----------------------| | **EQ** | = | 等值匹配 | | **NE** | <> | 不等匹配 | | **LT** | < | 小于比较 | | **LE** | <= | 小于等于 | | **GT** | > | 大于比较 | | **GE** | > = | 大于等于 | #### 2. 集合操作符 | 枚举名称 | 运算符 | 说明 | |----------------|----------|----------------------| | **IN** | IN | 包含匹配 | | **NOT_IN** | NOT IN | 排除匹配 | #### 3. 空值判断 | 枚举名称 | 运算符 | 说明 | |------------------|----------------|-----------------| | **ISNULL** | IS NULL | 空值判断 | | **IS_NOTNULL** | IS NOT NULL | 非空判断 | #### 4. 模糊查询 | 枚举名称 | 运算符 | 说明 | |--------------|--------|-----------------------| | **LIKE** | LIKE | 右模糊查询(自动加%) | --- ## 快速开始 🚀 详情请参考 [api-mediator](https://gitee.com/suwensen/api-mediator/tree/master/api-demo/src/main/java/com/luons/mediator/demo) 模块代码 ### Maven 依赖 ```xml io.github.luons api-dsl 相应的版本 ``` ### request json 样例 ```json { "pageNumber": 1, "pageSize": 10, "orderFields": "id,phone", "orderBy": "DESC", "filters": [ { "name": "phone", "operator": "not in", "values": [ "185xxxx5116" ] }, { "name": "username", "operator": "in", "values": [ "zhang", "li" ] }, { "name": "email", "operator": "is not null", "values": [ "" ] }, { "name": "email", "operator": "like", "values": [ "abc1" ] } ] } ``` ### 支持数据聚合 ### **2. 功能特性说明** #### **(1) 数据聚合支持** - **多维度分组**:通过 `dimensions` 定义分组(group by)字段,支持字段别名和格式化。 - **多指标聚合**:在 `measures` 中定义聚合逻辑,支持常见聚合函数(`sum`/`avg`/`count`/`max`/`min`)。 - **嵌套聚合**:支持对聚合结果二次计算(如 `sum(order_amount) / count(user_id)`)。 ### request json 样例 ```json { "pageNumber": 1, "pageSize": 10, "orderFields": "username", "orderBy": "DESC", "dimensions": [ { "code": "username", "column": "username", "alias": "userName" } ], "measures": [ { "code": "age", "column": { "column": "age", "alias": "ageAvg", "aggregation": "AVG" } }, { "code": "points", "column": { "column": "points", "alias": "pointsSum", "aggregation": "sum" } } ], "filters": [ { "name": "username", "operator": "in", "values": [ "zhangsan", "lisi" ] }, { "name": "email", "operator": "is not null", "values": [ "" ] } ] } ``` 🌟 注意点 1. Springboot 启动文件中新增 scanBasePackages 扫描 2. controller方法头添加 @QueryFilter(UserXXEntity.class)