李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 读书观影
  • 系列
  • AI工具集
  • 论坛
  • 友圈
    • 友链
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
静亦定 动亦定
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

SpringBoot整合GraphQL入门教程

2022年1月28日 230 0 1
本文最后更新于 2022年1月28日,距今已 1743 天,其中的信息可能已经发生变化,请注意甄别。

依赖

GraphQL相关依赖如下(SpringBoot2.X):

<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>5.0.2</version>
</dependency>
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-java-tools</artifactId>
    <version>5.2.4</version>
</dependency>
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>5.0.2</version>
</dependency>

核心代码

建立graphql文件

root.graphqls -- 接口定义

#查询入口
type Query {
    ####### Author相关 #########
    findAuthorById(id:ID!): Author
    findAllAuthors: [Author]!

    ####### Book相关 #########
    findAllBooks: [Book]!
    findBookById(id:ID!): Book!
}

type Mutation {
    newAuthor(firstName: String!,lastName: String!) : Boolean!
    saveBook(input: BookIn!) : Boolean!
}

schema.graphqls -- 报文定义

type Author {
    #作者Id
    id: BigInteger!
    #创建时间
    createdTime: String
    #名
    firstName: String
    #姓
    lastName: String
    #该作者的所有书籍
    books: [Book]
}

type Book {
    id: ID!
    title: String!
    isbn: String!
    pageCount: Int
    author: Author
    authorBatch: Author
}
input BookIn {
    title: String!
    isbn: String!
    pageCount: Int
    authorId: BigInteger!
}

base.graphqls -- 自定义标量(数据类型)

# 自定义标量类型:Long
scalar Long

scalar BigInteger

Query

Query主要实现查询功能:

@Component
public class Query implements GraphQLQueryResolver {
    @Resource
    private BookService bookService;

    @Resource
    private AuthorService authorService;

//    public List<Author> findAllAuthors() {
//        return authorService.list();
//    }
//
//    public Author findAuthorById(Long id) {
//        return authorService.getById(id);
//    }

    public List<Book> findAllBooks() {
        return bookService.list();
    }

    public Book findBookById(Long id) {
        return bookService.getById(id);
    }

}

Mutation

Mutation主要实现新增、修改、删除等功能:

@Component
public class Mutation implements GraphQLMutationResolver {
    @Resource
    private BookService bookService;

    @Resource
    private AuthorService authorService;

    public boolean newAuthor(String firstName, String lastName) {
        Author author = new Author();
        author.setLastName(lastName);
        author.setFirstName(firstName);
        return authorService.save(author);
    }

    public boolean saveBook(Book input) {
        return bookService.save(input);
    }
}

其他

graphql还可以结合dataloader来解决N+1问题,详细参考源码。

源码

https://gitee.com/lifengdi/graphql-demo

参考链接

1
  1. 1https://gitee.com/lifengdi/graphql-demogitee.com
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

SpringBoot整合GraphQL入门教程

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: GraphQL JAVA SpringBoot SQL 架构
最后更新:2022年1月28日

岁月同一天 11 月 7 日

回望过去的今天,你在写什么

  • AI
    1 年前 2025年11月7日
    DeepSeek本地部署全攻略:从环境搭建到高级应用,打造专属 AI 助手

    DeepSeek 作为国产开源大模型的佼佼者,凭借出色的推理能力、代码生成效率和中文支持,成为很多开发者本地部署的首选。…

相关文章
  • 解决Intellij IDEA运行报Command line is too long的问题2021年2月18日
  • SpringBoot启动概述(SpringBoot2.1.7)2020年1月10日
  • k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦2020年4月8日
  • 从零搭建Spring Cloud Gateway网关(一)2020年3月18日
  • 数据库更新如何实现乐观锁2025年12月26日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

  • 飞鱼先生Lv 1

    加油!

    macOSmacOSFirefox 96.0Firefox 96.0中国中国-河南-郑州
    2022年1月28日
    00 回复
  • 东风夜放花千树。更吹落、星如雨。宝马雕车香满路。凤箫声动,玉壶光转,一夜鱼龙舞。
    蛾儿雪柳黄金缕。笑语盈盈暗香去。众里寻他千百度。蓦然回首,那人却在,灯火阑珊处。

    听点儿音乐吧 朋友~
    文章目录
    最新 热点 随机
    最新 热点 随机
    给服务器加了WAF 又一个逆天改命的人:小小徐 AI的生成能力等于生产力吗? NGINX严重漏洞(CVE-2026-15176、CVE-2026-93479、CVE-2026-97205) Kratos-plus v1.1.27更新说明 php2shell远程执行漏洞修复(CVE-2026-109618 和 CVE-2026-109619)
    给主题增加了游客中心功能心气没了,干什么都不得劲我觉得是时候公布我的导航网站了给服务器加了WAF游本昌去世关于主题加载速度优化的一点儿小演进
    Elasticsearch的分布式文档存储原理 别再背线程池的七大参数了,现在面试官都这么问 Redis7.x&8.x 全新进阶系列(01):划时代升级总览——从6.x到7.x/8.x全版本变革全景 9.9元解锁AI编程新体验:Doubao-Seed-Code 深度实测 缓存架构实战指南:6大核心缓存技术深度解析与落地方案 如何形象的描述反应式编程中的背压(Backpressure)机制?
    最近评论
    fairy 发布于 5 小时前(11月06日) 机器人快来我这里吧!
    李锋镝 发布于 5 小时前(11月06日) 都是机器人,防不住
    李锋镝 发布于 5 小时前(11月06日) 是的,太烦了
    李锋镝 发布于 5 小时前(11月06日) 可以同一台服务器
    fairy 发布于 7 小时前(11月06日) 这流量,好厉害啊。我一年都没那么多
    标签聚合
    架构 MySQL Claude Theme SpringBoot K8s Spring WordPress ElasticSearch AI编程 JVM IDEA 数据库 AI 日常 分布式 Redis SQL JAVA 多线程
    友情链接
    • 老张博客
    • 九仞之行
    • Honesty
    • 韩小韩博客
    • 刘永博客
    • sssr7844的博客
    • 搬砖日记
    • 林羽凡
    • 皮皮社
    • Serendipity
    • 懋和道人
    • 哥斯拉
    • 瓦匠个人小站
    • 韩情脉脉
    • 彬红茶日记
    • 知向前端
    • lijie blog
    • 志文工作室
    • Mr.Sun的博客

    COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

    lifengdi.com 十年之约虫洞

    Domain age badge for lifengdi.com

    Theme Kratos-plus By Dylan Li

    津ICP备2024022503号-3

    京公网安备11011502039375号