美文网首页学习笔记
Springboot 整合 graphql

Springboot 整合 graphql

作者: 这里是廖同学 | 来源:发表于2019-08-01 20:43 被阅读102次

    1、导入Graphql核心依赖

           <!--Graphql 的 SpringBoot 启动器-->
            <dependency>
                <groupId>com.graphql-java-kickstart</groupId>
                <artifactId>graphql-spring-boot-starter</artifactId>
                <version>5.10.0</version>
            </dependency>
    
            <!--playground 服务器  用来测试Graphql接口-->
            <dependency>
                <groupId>com.graphql-java-kickstart</groupId>
                <artifactId>playground-spring-boot-starter</artifactId>
                <version>5.10.0</version>
            </dependency>
    
    

    注意点:这里还需引入spring-boot-starter-web启动器

    2、修改SpringBoot的kotlin版本号,否则会启动报错(注意这里必须修改)

    image.png

    这里我使用了最新的Spring-Boot依赖

    3、目录结构说明

    image.png

    1、 entity包存放的是实体类
    2、 resolve包存放的是graphql定义的接口
    3、 resources下面的graphql 存放的是graphql定义的类型和方法
    其他就没有什么重点了就不说了 大家应该都懂的

    4、开始使用Graphql

    1.创建实体类

    public class Empregado {
    
    
        private Long id;
    
    
        private String nome;
    
    
        private Integer idade;
    
    
        private Date nascimento;
    
    
        private List<Projeto> projetos;
    
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getNome() {
            return nome;
        }
    
        public void setNome(String nome) {
            this.nome = nome;
        }
    
        public Integer getIdade() {
            return idade;
        }
    
        public void setIdade(Integer idade) {
            this.idade = idade;
        }
    
        public Date getNascimento() {
            return nascimento;
        }
    
        public void setNascimento(Date nascimento) {
            this.nascimento = nascimento;
        }
    
        public List<Projeto> getProjetos() {
            return projetos;
        }
    
        public void setProjetos(List<Projeto> projetos) {
            this.projetos = projetos;
        }
    
        @Override
        public String toString() {
            return "Empregado{" +
                    "id=" + id +
                    ", nome='" + nome + '\'' +
                    ", idade=" + idade +
                    ", nascimento=" + nascimento +
                    ", projetos=" + projetos +
                    '}';
        }
    }
    
    public class Projeto {
    
        private Long id;
    
        private String nome;
    
    
        private Integer codigoServico;
    
    
        private String responsavel;
    
        private Date prazo;
    
    
        private Empregado empregado;
        //gets e sets
    
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getNome() {
            return nome;
        }
    
        public void setNome(String nome) {
            this.nome = nome;
        }
    
        public Integer getCodigoServico() {
            return codigoServico;
        }
    
        public void setCodigoServico(Integer codigoServico) {
            this.codigoServico = codigoServico;
        }
    
        public String getResponsavel() {
            return responsavel;
        }
    
        public void setResponsavel(String responsavel) {
            this.responsavel = responsavel;
        }
    
        public Date getPrazo() {
            return prazo;
        }
    
        public void setPrazo(Date prazo) {
            this.prazo = prazo;
        }
    
        public Empregado getEmpregado() {
            return empregado;
        }
    
        public void setEmpregado(Empregado empregado) {
            this.empregado = empregado;
        }
    
        @Override
        public String toString() {
            return "Projeto{" +
                    "id=" + id +
                    ", nome='" + nome + '\'' +
                    ", codigoServico=" + codigoServico +
                    ", responsavel='" + responsavel + '\'' +
                    ", prazo=" + prazo +
                    ", empregado=" + empregado +
                    '}';
        }
    }
    

    2.创建graphql解析的接口

    @Component
    public class Mutation implements GraphQLMutationResolver {
    
        public boolean deletarEmpregado(Long id) {
            System.out.println("删除了" + id);
            return true;
        }
    
    }
    
    @Component
    public class Query implements GraphQLQueryResolver {
    
        public List<Empregado> obterEmpregados() {
            List<Empregado> empregados = new ArrayList<>();
            Empregado empregado = new Empregado();
            empregado.setId(1L);
            empregado.setIdade(123);
            empregado.setNascimento(new Date());
            empregado.setNome("slayer");
            empregados.add(empregado);
            return empregados;
        }
    }
    

    这里有个重要的注意点 :

    GraphQLQueryResolver 定义的是数据查询的方法接口
    GraphQLMutationResolver 定义的是数据增删改的方法接口

    3、配置文件(application.yml)

    graphql:
      servlet:
        mapping: /graphql   #接口的路径
        exception-handlers-enabled: true
    
    

    4、Graphql配置文件(schema.graphqls)

    #定义实体类类型
    type Empregado {
      id: ID!
      nome: String!
      idade: Int!
      nascimento: String @date
      projetos: [Projeto]!
    }
    
    type Projeto {
      id: ID!
      nome: String!
      codigoServico: Int!
      responsavel: String!
      prazo: String! @date
    }
    
    #定义查询的方法
    type Query {
      obterEmpregados: [Empregado]!
    }
    
    #定义增删改的方法
    type Mutation {
        deletarEmpregado(id: Int!) : Boolean
    }
    

    完成以上配置之后 启动服务器 输入http://localhost:8080/playground 则会看到一个这样子的页面

    image.png

    输入查询语句

    query {
      obterEmpregados{
        id
        nome
        idade
        nascimento
      }
    }
    
    
    image.png

    看到一个这样子的页面则 集成Graphql+SpringBoot成功!!!

    相关文章

      网友评论

        本文标题:Springboot 整合 graphql

        本文链接:https://www.haomeiwen.com/subject/wbzcdctx.html