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>
<!--springboot web模塊支持法梯,自動幫我們引入了web模塊開發(fā)需要的相關jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2勾缭、修改SpringBoot的kotlin版本號提揍,否則會啟動報錯(注意這里必須修改)
這里我使用了最新的Spring-Boot依賴
3、目錄結(jié)構(gòu)說明
image.png
1一汽、 entity包存放的是實體類
2避消、 resolve包存放的是graphql定義的接口
3、 resources下面的graphql 存放的是graphql定義的類型和方法
其他就沒有什么重點了就不說了 大家應該都懂的
4召夹、開始使用Graphql
1.創(chuàng)建實體類
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.創(chuàng)建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 定義的是數(shù)據(jù)查詢的方法接口
GraphQLMutationResolver 定義的是數(shù)據(jù)增刪改的方法接口
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