项目学习GraphQL(四)

4. GraphQL Server实现——基于SpringBoot+GraphQL

在实现一个GraphQL Server之前,建议大家先去看看一个具体的GraphQL查询语句是如何执行的,由于理论的内容太多,请大家具体参阅:
https://graphql.org/learn/execution/
本章节项目案例及部分代码参考自:
https://www.graphql-java.com/documentation/v14/

4.1 SpringBoot简介

SpringBoot应该是目前基于Java语言的最重要的一个框架了,也是Java开源框架中的一个具有划时代意义的产品。结合Java面向对象的语言特性和Spring的AOP软件工程思想,应该说SpringBoot是开发大型、复杂的前后端分离的软件的不二选择。特别是由Java衍生出的Scala结合Spark、Hadoop等大数据平台,为打造能力更强的“大后端”提供了可能性。
下面我们就结合一个具体的例子,来看看如何使用SpringBoot来开发一个我们自己的GraphQL Server。

4.2 开发平台和开发工具

Java开发工具:IntellJ IDEA,一个能够让我这个用了十多年Eclipse的转投IntellJ自然尤其自身的优势。
数据库:MySQL
数据库管理工具:MySQL Workbench

4.3 具体开发步骤

4.3.1 MySQL数据库创建

CREATE DATABASE /*!32312 IF NOT EXISTS*/`graphql` /*!40100 DEFAULT CHARACTER SET utf8 */;
 
USE `graphql`;
 
/*Table structure for table `author` */
 
DROP TABLE IF EXISTS `author`;
 
CREATE TABLE `author` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Key word',
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Created time',
  `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Updated time',
  `first_name` varchar(50) DEFAULT NULL COMMENT 'firstName',
  `last_name` varchar(50) DEFAULT NULL COMMENT 'lastName',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
/*Table structure for table `book` */
 
DROP TABLE IF EXISTS `book`;
 
CREATE TABLE `book` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Key word',
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Created time',
  `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Updated time',
  `title` varchar(50) DEFAULT NULL COMMENT 'Title',
  `author_id` bigint(20) NOT NULL,
  `isbn` varchar(255) DEFAULT NULL,
  `page_count` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
/*Table structure for table `user` */
 
DROP TABLE IF EXISTS `user`;

执行完上述代码之后,在MySQL中能创建一个名为graphql的database。它包含两个表格“author”和“book”。
创建完成之后,schema的结构如下:
在这里插入图片描述

4.3.2 在IntellJ中创建SpringBoot项目

在IntellJ中,选择File=>new=>project,在new project对话框中,选择“Spring Initia”,在“Project SDK”中建议选择“1.8”,因为本人在实际开发过程中SDK 11曾经出现过很多兼容性问题。
在这里插入图片描述
单击“Next”
在这里插入图片描述
在这一步就按默认的选项,Java version建议选“8”,单击“Next”
在这一步我们需要选择项目当中需要用的的dependecies:
在这里插入图片描述
在本项目中,需要用到以下dependencies:

  1. Developer Tools在这里插入图片描述

  2. Web在这里插入图片描述

  3. Template Engine在这里插入图片描述

  4. SQL.在这里插入图片描述在这里我们要同时添加 Spring Data JPA和MySQL Driver,分别用于创建数据中间层和MySQL的驱动

  5. 最后为项目命名并选择存储位置在这里插入图片描述

4.3.3 在IntellJ中添加GraphQL plugin

File=>setting,在setting对话框中选择plugins,确认添加了JS GraphQL plugin
在这里插入图片描述

4.3.4 添加GraphQL的dependencies

目前在SpringBoot中对GraphQL支持比较好的Package就是graphql-java-kickstart了,它集成了相当多的有用工具,比原生的GraphQL-Java package要好用很多,而且在其中就集成了GraphQL Playground调试工具,测试GraphQL语句非常方便。详细请参阅:https://github.com/graphql-java-kickstart/graphql-spring-boot
添加完上述所需dependencies后,完整的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.0-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>springboot_graphql</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot_graphql</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>8</java.version>
		<kotlin.version>0.3.70</kotlin.version>
	</properties>


	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值