李锋镝的博客 - LiFengdi.Com

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

SpringBoot整合GraphQL入门教程

2022年1月28日 6680点热度 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
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: GraphQL JAVA SpringBoot SQL 架构
最后更新:2022年1月28日

李锋镝

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

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

加油!

0
0
回复
支付宝红包

我有一瓢酒,可以慰风尘。

最新 热点 随机
最新 热点 随机
回忆是一条没有尽头的路 这样的日子什么时候才是个头 MySQL 中的 distinct 和 group by 哪个效率更高? 开工啦~ 今晚,回家过年! 图数据库选型:Neo4j、Janus、HugeGraph
看病难~取药难~~阳了...开工啦~RocketMQ的push消费方式实现详解国庆节过的也很累~~MybatisCodeHelperPro激活
妈呀,昨天晚上睡觉做了一晚上的梦,可累死我了 K8S + docker部署war包项目 ZooKeeper 的选举机制,你了解多少? Java简介 分布式服务生成唯一不重复ID(24位字符串) 今晚,回家过年!
最近评论
李锋镝 发布于 2 周前(03月10日) 已添加~欢迎回访喔
博客录(boke.lu) 发布于 2 周前(03月10日) 已添加贵站0.0 名称:博客录(boke.lu) 简介:boke.lu · 博客收录展示平台~ 链接...
李锋镝 发布于 3 周前(03月05日) 系统版本是win11吗?
HJQ 发布于 4 周前(02月28日) 同问,注册表都没有楼主说的值。
林羽凡 发布于 1 个月前(02月16日) 开工大吉。
有情链接
  • 志文工作室
  • 临窗旋墨
  • 旧时繁华
  • 城南旧事
  • 强仔博客
  • 林三随笔
  • 徐艺扬的博客
  • 云辰博客
  • 韩小韩博客
  • 知向前端
  • 阿誉的博客
  • 林羽凡
  • 情侣头像
  • 哥斯拉
  • 博客录

COPYRIGHT © 2022 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备16004681号-2