Graphql的入门使用

准备工作:

【这里是2018年的版本很好理解,后面的版本改了groupid以及新增了些内容这里入门还挺老版本容易快速入门,差别再文章后面稍有介绍】

1.导入springboot集成graphql的开源demospring-boot-graphql: spring-boot-graphql demo

2.下载postman

接下来就可以学习graphql了

第一步先把springboot里面的数据源改成自己的测试数据库

第二步注意下图所框住的包

 首先demo中的graphql看怎么集成的

1.pom

<!-- graphql -->
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-java-tools</artifactId>
    <version>4.3.0</version>
</dependency>

2.这里有两个文件

(1)schema.grapqls对应前端的vo

  (2)root.graphqls是定义query【查询】,mutation【修改新增】对象,里面包含了API提供调用的方法

所以root.grapqls对应视图解析器自己定义的Query和Mutation里面的方法

定义:
type Query {
    findAllAuthors: [Author]!
    countAuthors: Long!
    findOneAuthor(id: Long!): Author

    findAllBooks: [Book]!
    countBooks: Long!
}

type Mutation {
    newAuthor(firstName: String!, lastName: String!) : Author!

    newBook(title: String!, isbn: String!, pageCount: Int, authorId: Long!) : Book!
    saveBook(input: BookInput!): Book!
    deleteBook(id: ID!) : Boolean
    updateBookPageCount(pageCount: Int!, id: Long!) : Book!
}

映射的方法:

public class Query implements GraphQLQueryResolver {

    private AuthorRepository authorRepository;

    private BookRepository bookRepository;

    public Author findOneAuthor(Long id) {
        Optional<Author> opt = authorRepository.findById(id);
        return opt.isPresent() ? opt.get() : null;
    }

    public List<Author> findAllAuthors() {
        return authorRepository.findAll();
    }

    public Long countAuthors() {
        return authorRepository.count();
    }

    public List<Book> findAllBooks() {
        return bookRepository.findAll();
    }

    public Long countBooks() {
        return bookRepository.count();
    }
}


public class Mutation implements GraphQLMutationResolver {

    private AuthorRepository authorRepository;

    private BookRepository bookRepository;


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

    public Book newBook(String title, String isbn, int pageCount, long authorId) {
        Book book = new Book();
        book.setTitle(title);
        book.setIsbn(isbn);
        book.setPageCount(pageCount);
        book.setAuthorId(authorId);
        return bookRepository.save(book);
    }

    public Book saveBook(BookInput input) {
        Book book = new Book();
        book.setTitle(input.getTitle());
        book.setIsbn(input.getIsbn());
        book.setPageCount(input.getPageCount());
        book.setAuthorId(input.getAuthorId());
        return bookRepository.save(book);
    }

    public Boolean deleteBook(long id) {
        bookRepository.deleteById(id);
        return true;
    }

    public Book updateBookPageCount(int pageCount, long id) {
        Optional<Book> opt = bookRepository.findById(id);
        if (!opt.isPresent()) return null;

        Book book = opt.get();
        book.setPageCount(pageCount);
        return bookRepository.save(book);
    }
}




这里是是针对单个对象里面包含的属性类型都是非自定义的对象类型,如果单个自定义对象里面还包含复杂自定义对象,那还需要对应的解析器【主要看schema.graphqls有没有定义这种对象】

从图上可以看到BOOK中包含Author,Author中有BOOK

所以还需要对应的解析器

 

 至于方法名称规则,单个对象getX,多个List对象对应getXs

以下配上postman使用【postman集成了graphql】

 

到此应该算是入门了吧,至于精通我个人觉得没必要,因为我觉得Graphql不是很容易再公司用起来,算是个定制化的吧,前后端都要集成才可以用,而且通信数据类型很奇葩,外层是个大JSON,里面是个字符串,不是个纯粹可以转为JSON的数据【可以用抓包自己看】,这种不纯粹的通信编码协议估计是火不起来的原因

最后新增版本2018以后,graphql改了包名

        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphql-spring-boot-starter</artifactId>
            <version>${graphql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphiql-spring-boot-starter</artifactId>
            <version>${graphql.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java-extended-scalars</artifactId>
            <version>${graphql.extended.scalars.version}</version>
        </dependency>

最新源码链接:https://github.com/philip-jvm/learn-spring-boot-graphql

有兴趣的可以再入门后,研究新源码

graphql查询推荐工具: https://www.electronjs.org/apps/graphql-playground


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值