类型
GraphQL 类型系统及 Graphoenix 拓展
GraphQL 类型
关于 GraphQL 类型定义的详细内容, 请参考 GraphQL 官网的类型系统(中文版)
内置标量类型(Scalar Types)
Grpahoenix 在GraphQL 标量的基础之上, 根据Microprofile GraphQL 协议的规定进行拓展
| 参数名 | 说明 | JSON 类型 | Java 类型 | MySQL 类型 | protobuf 类型 |
|---|---|---|---|---|---|
| Int | 有符号 32 位整数 | number | int/Integer short/Short byte/Byte | INT | int32 |
| Float | 有符号双精度浮点值 | number | float/Float double/Double | FLOAT | float |
| String | UTF‐8 字符序列 | string | String char/Character | VARCHAR | string |
| Boolean | true 或者 false | true/false | boolean/Boolean | BOOL | bool |
| ID | ID 标量类型表示一个唯一标识符,ID 类型使用和 String 一样的方式序列化 | string | String | VARCHAR/INT | string |
| BigInteger | 表示一个任意大小且精度完全准确的浮点数 | number | BigInteger | BIGINT | google.type.Decimal |
| BigDecimal | 表示任意大小的整数 | number | BigDecimal | DECIMAL | google.type.Decimal |
| Date | 日期 | string | java.time.LocalDate | DATE | google.type.Date |
| Time | 时间 | string | java.time.LocalTime | TIME | google.type.TimeOfDay |
| DateTime | 日期时间 | string | java.time.LocalDateTime | DATETIME | google.type.DateTime |
| Timestamp | 时间戳 | string | java.time.LocalDateTime | TIMESTAMP | google.protobuf.Timestamp |
内置枚举类型(Enumeration Types)
Graphoenix 内置枚举类如下
Operator
| 参数名 | 说明 | SQL 示例 |
|---|---|---|
| EQ | 等于 | WHERE t.field = 'xyz' |
| NEQ | 不等于 | WHERE t.field <> 'xyz' |
| LK | 匹配(需要%) | WHERE t.field LIKE '%xyz%' |
| NLK | 不匹配(需要%) | WHERE t.field NOT LIKE '%xyz%' |
| GT | 大于 | WHERE t.field > 'xyz' |
| GTE | 大于等于 | WHERE t.field >= 'xyz' |
| LT | 小于 | WHERE t.field < 'xyz' |
| LTE | 小于等于 | WHERE t.field <= 'xyz' |
| NIL | 为 NULL | WHERE t.field IS NULL |
| NNIL | 不为 NULL | WHERE t.field IS NOT NULL |
| IN | 属于 | WHERE t.field IN ('x', 'y', 'z') |
| NIN | 不属于 | WHERE t.field NOT IN ('x', 'y', 'z') |
| BT | 在...区间(数组的每两个元素为一个区间) | WHERE t.field > 1 AND t.field < 3 AND t.field > 5 AND t.field < 7 |
| NBT | 不在...区间(数组的每两个元素为一个区间) | WHERE t.field < 1 AND t.field > 3 AND t.field < 5 AND t.field > 7 |
Conditional
| 参数名 | 说明 | SQL 示例 |
|---|---|---|
| AND | 并 | WHERE t.field = 'xyz' AND t.field <> 'abc' |
| OR | 或 | WHERE t.field = 'xyz' OR t.field <> 'abc' |
Sort
| 参数名 | 说明 | SQL 示例 |
|---|---|---|
| ASC | 升序 | ORDER BY t.field ASC |
| DESC | 降序 | ORDER BY t.field DESC |
Func
| 参数名 | 说明 | SQL 示例 |
|---|---|---|
| COUNT | 条数 | SELECT COUNT( field ) FROM t |
| MAX | 最大值 | SELECT MAX( field ) FROM t |
| MIN | 最小值 | SELECT MIN( field ) FROM t |
| SUM | 合计 | SELECT SUM( field ) FROM t |
| AVG | 平均值 | SELECT AVG( field ) FROM t |
Protocol
| 参数名 | 说明 | 协议 |
|---|---|---|
| LOCAL | 本地调用 | |
| GRPC | gRPC | https://grpc.io/ |
| HTTP | http | |
| RSOCKET | RSocket | https://rsocket.io/ |
内置对象类型和字段(Object Types and Fields)
(Object)Connection
Graphoenix 会自动为所有 Object 类型生成对应的Connection对象
| 字段 | 类型 | 说明 |
|---|---|---|
| totalCount | Int | 总条数 |
| pageInfo | PageInfo | 分页(游标)信息 |
| edges | [(Object)Edge] | 查询边缘 |
(Object)Edge
Graphoenix 会自动为所有 Object 类型生成对应的Edge对象
| 字段 | 类型 | 说明 |
|---|---|---|
| cursor | String | 游标字段 |
| node | Object | 查询节点 |
PageInfo
| 字段 | 类型 | 说明 |
|---|---|---|
| hasNextPage | Boolean | 是否存在下一页 |
| hasPreviousPage | Boolean | 是否存在上一页 |
| startCursor | String | 开始游标 |
| endCursor | String | 结束游标 |
内置输入类型(Input Types)
(Scalar/Enum)Expression
Graphoenix 为每个 Scalar 和 Enum 类型生成 Expression 输入类型用于查询
| 参数名 | 类型 | 默认值 | 说明 | SQL 示例 |
|---|---|---|---|---|
| opr | Operator | EQ | 匹配符号 | WHERE t.field = 'xyz' |
| val | (Scalar/Enum) | 无 | 匹配值 | WHERE t.field = 'xyz' |
| arr | [(Scalar/Enum)] | 无 | 匹配列表 | WHERE t.field IN ('x', 'y', 'z') |
| skipNull | Boolean | false | 如果值为 NULL 忽略参数 |
(Object)Expression
Graphoenix 为每个 Object 类型生成 Expression 输入类型用于查询
| 参数名 | 类型 | 默认值 | 说明 | SQL 示例 |
|---|---|---|---|---|
| (field) | (Scalar/Enum/Object)Expression | 无 | 条件字段 | SELECT id FROM t WHERE t.field = 'xyz' |
| cond | Conditional | AND | 参数内条件的组合关系 | WHERE t.field = 'xyz' AND t.field <> 'abc' |
| not | Boolean | false | 条件取非 | WHERE NOT (t.field = 'xyz' AND t.field <> 'abc') |
| exs | [(Object)Expression] | 无 | 同一字段多次作为查询条件时可使用此参数 | WHERE ( t.field = 'xyz' AND t.field <> 'abc' ) |
(Object)OrderBy
Graphoenix 为每个 Object 类型生成 Expression 输入类型用于排序
| 参数名 | 类型 | 默认值 | 说明 | SQL 示例 |
|---|---|---|---|---|
| (field) | Sort | 无 | 排序方式 | SELECT id FROM t ORDER BY t.field |
(Object)Input
Graphoenix 为每个 Object 类型生成 Expression 输入类型用于变更
| 参数名 | 类型 | 默认值 | 说明 | SQL 示例 |
|---|---|---|---|---|
| (field) | Scalar/Enum/(Object)Input | 无 | 变更字段 | INSERT INTO t ( id, field ) VALUES ( 'x', 'y' ) ON DUPLICATE KEY UPDATE t.id = VALUES ( t.id ), t.field = VALUES ( t.field ) |
| where | (Object)Expression | 无 | 更新条件 | UPDATE t SET field = 'z' WHERE id = 'x' |
| isDeprecated | Boolean | false | 删除标记( @merge 指令存在时表示从数组中移除) |
内置接口(Interfaces)
Meta
Graphoenix 规定所有 Object 类型实现 Meta 接口, 用于保存元信息
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| isDeprecated | Boolean | false | 删除标记 |
| version | Int | 无 | 版本 |
| realmId | Int | 无 | 域 |
| createUserId | String | 无 | 创建用户 |
| createTime | Timestamp | 无 | 创建时间 |
| updateUserId | String | 无 | 更新用户 |
| updateTime | Timestamp | 无 | 更新时间 |
| createGroupId | String | 无 | 创建组 |