关注公众号,学习更多 Java 干货!
来源:www.toutiao.com/i6929867921162273292

前言

在浅尝GraphQL一文描述了GraphQL及基本使用,本文提供一个基本示例,描述如何基于spring boot的web项目快速应用。
graphql-java的官方文档:Getting started with GraphQL Java and Spring Boot,提供了相关依赖用以快速配置,但是个人真心不建议使用这个库及相关配置方式来搭建脚手架,在实际开发中,业务比较复杂的时候,会导致需要配置的业务代码比较多也比较繁琐,相对下面这种方式,代码复杂性比较高。
本文提供一种更灵活快捷的方式,在spring boot项目中快速应用开发。使用的依赖也和上面官方提供的都不一样,请注意区分。

快速开始

创建spring boot工程

通过Spring Initializr快速搭建,我选的jdk版本及spring boot版本,如下所示,其它版本未做兼容性测试。
点击下方的Generate按钮:
打开工程结构如下,我将application.properties删除了替换成applicaiton.yml,因为我个人比较喜欢yaml的配置方式:

引入相关依赖

pom.xml配置如下:
<?xml version=
"1.0"
 encoding=
"UTF-8"
?>

<project xmlns=
"http://maven.apache.org/POM/4.0.0"
 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>

 <modelVersion>4.0.0</modelVersion>

 <parent>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-parent</artifactId>

  <version>2.4.6</version>

  <relativePath/> <!-- lookup parent from repository -->

 </parent>

 <groupId>com.xuxd</groupId>

 <artifactId>graphql.demo</artifactId>

 <version>0.0.1-SNAPSHOT</version>

 <name>graphql.demo</name>

 <description>GraphQL Demo project 
for
 Spring Boot</description>

 <properties>

  <java.version>1.8</java.version>

  <maven.compiler.source>1.8</maven.compiler.source>

  <maven.compiler.target>1.8</maven.compiler.target>

  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

  <lombok.version>1.18.20</lombok.version>

  <graphql-java-tools.version>11.0.1</graphql-java-tools.version>

  <gson.version>2.8.7</gson.version>

 </properties>

 <dependencies>

  <dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter</artifactId>

  </dependency>


  <dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-web</artifactId>

  </dependency>


  <dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-test</artifactId>

   <scope>
test
</scope>

  </dependency>


  <dependency>

   <groupId>org.projectlombok</groupId>

   <artifactId>lombok</artifactId>

   <version>
${lombok.version}
</version>

   <scope>provided</scope>

  </dependency>


  <dependency>

   <groupId>com.graphql-java-kickstart</groupId>

   <artifactId>graphql-java-tools</artifactId>

   <version>
${graphql-java-tools.version}
</version>

  </dependency>


  <dependency>

   <groupId>com.google.code.gson</groupId>

   <artifactId>gson</artifactId>

   <version>
${gson.version}
</version>

  </dependency>

 </dependencies>


 <build>

  <plugins>

   <plugin>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-maven-plugin</artifactId>

   </plugin>

  </plugins>

 </build>


</project>

初始化GraphQL实例

Spring Boot 基础就不介绍了,推荐下这个实战教程:https://www.javastack.cn/categories/Spring-Boot/
关于*.graphqls或者对应的Resolver如ItemResolver,可以参看浅尝GraphQL相关描述,这里只是作了微调整,相关代码如下:
base.grqphqls
schema {

# 查询
    query: Query

# 更新
    mutation: Mutation

}


type
 Query {

    version: String

}


type
 Mutation {

    version: String

}

item.graphqls
# 定义一个查询类型
extend 
type
 Query {

    queryItemList: ItemList  
# 定义查询项目列表
    queryById(id: ID): Item

}


extend 
type
 Mutation {

    updateName(param: Param): Item

}


# 定义项目字段
type
 Item {

    id: ID!

    code: String!

    name: String!

}


type
 ItemList {

    itemList: [Item!]!  
#获取项目列表
    total: Int!      
# 获取项目总数
}


input Param {

    id: ID!

    name: String!

}

ItemResolver
public class ItemResolver implements GraphQLQueryResolver, GraphQLMutationResolver {


    private IItemService itemService;


    public ItemResolver(IItemService itemService) {

        this.itemService = itemService;

    }


    // 对应item.graphqls里的queryItemList

    public ItemList 
queryItemList
() {

return
 itemService.queryItemList();

    }


    public Item queryById(Long id) {

return
 itemService.queryById(id);

    }


    public Item updateName(Param param) {

return
 itemService.updateName(param);

    }

}

相关业务代码比较多,就不一一贴了。
关注公众号,学习更多 Java 干货!

提供API

测试

示例中总共提供了3个接口,两个查询一个更新,分别进行测试:
ItemList queryItemList();


Item queryById(Long id);


Item updateName(Param param);

查询所有项目列表(只获取每个项目的编码和名称,以及列表总数):
根据ID查询,获取项目的id和名称
更新指定ID的项目名称
我们项目Id为1编码为test的项目修改为“java项目”
再查询一下,可以看到结果更新了:

结束语

这样整个项目的GraphQL相关的基本配置已经完成,可以进行业务开发了。
(完)
 关注公众号:Java后端编程,回复下面关键字 
要Java学习完整路线,回复  路线 
缺Java入门视频,回复 视频 
要Java面试经验,回复  面试 
缺Java项目,回复: 项目 
进Java粉丝群: 加群 
PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。
(完)
加我"微信获取一份 最新Java面试题资料
请备注:666不然不通过~
最近好文
最近面试BAT,整理一份面试资料Java面试BAT通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:关注公众号并回复 java 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
继续阅读
阅读原文