李锋镝的博客 - LiFengdi.Com

  • 首页
  • 时间轴
  • 留言
  • 左邻右舍
  • 我的日常
  • 关于我
青衿之志 履践致远
霁月光风 不萦于怀
  1. 首页
  2. 原创
  3. 正文

SpringBoot整合GraphQL入门教程

2022年1月28日 3289点热度 0人点赞 1条评论

依赖

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

除非注明,否则均为李锋镝的博客 - LiFengdi.Com原创文章,转载必须以链接形式标明本文链接
本文链接:https://www.lifengdi.com/archives/article/3780
标签: GraphQL JAVA SpringBoot SQL 架构
最后更新:2022年1月28日

李锋镝

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

打赏 点赞
< 上一篇
下一篇 >
guest
您的姓名(必填)
您的邮箱(必填)
您的站点
guest
您的姓名(必填)
您的邮箱(必填)
您的站点
1 评论
最热
最新 最旧
Inline Feedbacks
查看所有评论
飞鱼先生
飞鱼先生
游侠
2022年1月28日 22:30

加油!

0
0
回复
文章目录
  • 依赖
  • 核心代码
    • 建立graphql文件
  • 其他
  • 源码
网站统计
  • 文章总数:259 篇
  • 评论总数:417 篇
  • 标签数量:218 个
  • 最后更新:2022年5月19日 20:08
  • 建站日期:2016年6月6日
  • 运行天数:2173天

夜阑卧听风吹雨,铁马冰河入梦来。

最新 热点 随机
最新 热点 随机
jsdelivr的CDN加速好像不行了…… 居家办公了~ Python SQL查询使用动态表名 C# 11 的这个新特性,我愿称之最强! iTerm2设置SSH自动连接服务器 一线技术人的成长思考总结
居家办公了~关于8月29号下午博客故障的一些记录办理居住证困难重重啊!WordPress的自动更新好烦啊醒醒~补个税了居住证签注...
终于有人把Elasticsearch原理讲透了! 分布式ID生成算法SnowFlake(雪花算法)Java源码 多层嵌套map对象转扁平化map 何时重构? 分布式、多线程、高并发概念与区别 沁园春·长沙
标签聚合
SpringBoot 分布式 日常 数据库 JAVA MySQL ElasticSearch 架构
最近评论
zenmexiugai 发布于 3 小时前(05月20日) 改成一样的还是报错,怎么回事呢
张三 发布于 10 小时前(05月19日) 我不会css,作者的前端是怎么写的啊?包括这些评论啊什么的
张三 发布于 10 小时前(05月19日) 很棒的博客 作者加油啊
Andy烧麦 发布于 2 天前(05月18日) 将原本的通勤时间拿来学习,还是不错的
傅小黑 发布于 2 天前(05月17日) 居家工作更累
有情链接
  • 志文工作室
  • 临窗旋墨
  • 旧时繁华
  • 城南旧事
  • 强仔博客
  • 林三随笔
  • 徐艺扬的博客
  • 猫鼬的星球计划
  • 云辰博客
  • 韩小韩博客
  • 知向前端
  • 阿誉的博客
  • 林羽凡
  • 情侣头像
  • 哥斯拉
  • Xym's blog

COPYRIGHT © 2022 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备16004681号-2