基本概念
概念
在Spring篇,我们讨论了如何利用Jimmer实现REST服务,并为之自动生成客户端所需的代码,比如TypeScript。
不仅如此,Jimmer还支持另外一种开发模式,构建GraphQL服务。这是本系列文章要讨论的内容。
警告
截止到目前为止,GraphQL协议并不支持自关联属性的递归查询。
因此,无法通过GraphQL暴露类似于对象抓取器的递归查询的功能,这是目前使用GraphQL必须接受的功能牺牲。
Jimmer对GraphQL的支持基于Spring GraphQL实现的。 所以,项目需要同时导入Jimmer和Spring GraphQL的Spring Boot Starter,比如
- Maven
- Gradle
pom.xml
...省略其他代码...
<build>
<dependencies>
<dependency>
<groupId>org.babyfish.jimmer</groupId>
<artifactId>jimmer-spring-boot-starter</artifactId>
<version>${jimmer.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
<version>${spring.boot.version}</version>
</dependency>
...省略其他依赖...
</dependencies>
</build>
...省略其他代码...
build.gradle
dependencies {
implementation "org.babyfish.jimmer:jimmer-spring-boot-starter:${jimmerVersion}"
implementation 'org.springframework.boot:spring-boot-starter-graphql'
...省略其他依赖...
}
信息
如果Jimmer实体类型也定义在GraphQL项目中,而并未独立形成另外一个项目,那么预编译器 (对Java而言,是Annotation Processor;对Kotlin而言,是KSP) 也配置在构建脚本中。
这部分内容已经在生成代码一文中被详细论述过,本文不再重复。
Spring GraphQL是Schema-First方案,而非Code-First方案,
因此,开发人员需要为项目创建文件src/main/resources/graphql/schema.graphqls
,并在其中定义GraphQL Schema。
这个文件是Spring GraphQL的要求,其内容GraphQL schema是一种标准的语言,它们都和Jimmer无关,本文不做解释,可参考附带例子的GraphQL Schema。
注意事项
警告
目前版本存在限制,在提供GraphQL服务时,请勿使用基于SQL的简单计算属性