前言

前一篇,已经讲了go语言中的使用。那么java端如何使用。


maven地址:

<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>5.0</version>
</dependency>


1.定义用户结构

public class User {
   private int id;
   private int age;
   private int sex;
   private String name;
   private String pic;
   // get set方法
}

2. 定义graph 用户结构

private GraphQLOutputType userType;
/**
 * 定义用户对象结构
 */
private void initOutputType() {
   userType = GraphQLObjectType.newObject().name("User")
         .field(GraphQLFieldDefinition.newFieldDefinition().name("id").type(Scalars.GraphQLInt).build())
         .field(GraphQLFieldDefinition.newFieldDefinition().name("age").type(Scalars.GraphQLInt).build())
         .field(GraphQLFieldDefinition.newFieldDefinition().name("sex").type(Scalars.GraphQLInt).build())
         .field(GraphQLFieldDefinition.newFieldDefinition().name("name").type(Scalars.GraphQLString).build())
         .field(GraphQLFieldDefinition.newFieldDefinition().name("pic").type(Scalars.GraphQLString).build())
         .build();
}

3. 定义查询单个用户信息方法

/**
 * 查询单个用户信息
 */
private GraphQLFieldDefinition createUserField() {
   return GraphQLFieldDefinition.newFieldDefinition().name("user")
         .argument(newArgument().name("id").type(Scalars.GraphQLInt).build()).type(userType)
         .dataFetcher(environment -> {
            // 获取查询参数
            int id = environment.getArgument("id");

            // 执行查询, 这里随便用一些测试数据来说明问题
            User user = new User();
            user.setId(id);
            user.setAge(id + 15);
            user.setSex(id % 2);
            user.setName("Name_" + id);
            user.setPic("pic_" + id + ".jpg");
            return user;
         }).build();
}

4.查询多个用户信息

/**
 * 查询多个用户信息
 */
private GraphQLFieldDefinition createUsersField() {
   return GraphQLFieldDefinition.newFieldDefinition().name("users")
         .argument(newArgument().name("page").type(Scalars.GraphQLInt).build())
         .argument(newArgument().name("size").type(Scalars.GraphQLInt).build())
         .argument(newArgument().name("name").type(Scalars.GraphQLString).build())
         .type(new GraphQLList(userType)).dataFetcher(environment -> {
            // 获取查询参数
            int page = environment.getArgument("page");
            int size = environment.getArgument("size");
            String name = environment.getArgument("name");

            // 执行查询, 这里随便用一些测试数据来说明问题
            List<User> list = new ArrayList<>(size);
            for (int i = 0; i < size; i++) {
               User user = new User();
               user.setId(i);
               user.setAge(i + 15);
               user.setSex(i % 2);
               user.setName(name + "_" + page + "_" + i);
               user.setPic("pic_" + i + ".jpg");
               list.add(user);
            }
            return list;
         }).build();
}


5.定义 GraphQLSchema 对象

public GraphQLSchema getSchema() {
   initOutputType();
   GraphQLSchema schema = GraphQLSchema.newSchema().query(GraphQLObjectType.newObject().name("GraphQuery")
         .field(createUsersField()).field(createUserField()).build()).build();
   return schema;
}


6.执行

import graphql.GraphQL;
import graphql.Scalars;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLList;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLOutputType;
import graphql.schema.GraphQLSchema;

import java.util.ArrayList;
import java.util.List;

public static void main(String[] args) {
   String query1 = "{users(page:2,size:5,name:\"john\") {id,sex,name,pic}}";
   String query2 = "{user(id:6) {id,sex,name,pic}}";
   String query3 = "{user(id:6) {id,sex,name,pic},users(page:2,size:5,name:\"john\") {id,sex,name,pic}}";

   GraphQLSchema schema = new HelloGraphql().getSchema();

   Object result1 = GraphQL.newGraphQL(schema).build().execute(query1).getData();
   Object result2 = GraphQL.newGraphQL(schema).build().execute(query2).getData();
   Object result3 = GraphQL.newGraphQL(schema).build().execute(query3).getData();

   // 查询用户列表
   System.out.println(result1);
   // 查询单个用户
   System.out.println(result2);
   // 单个用户、跟用户列表一起查
   System.out.println(result3);
}


执行结构:

{users=[{id=0, sex=0, name=john_2_0, pic=pic_0.jpg}, {id=1, sex=1, name=john_2_1, pic=pic_1.jpg}, {id=2, sex=0, name=john_2_2, pic=pic_2.jpg}, {id=3, sex=1, name=john_2_3, pic=pic_3.jpg}, {id=4, sex=0, name=john_2_4, pic=pic_4.jpg}]}

{user={id=6, sex=0, name=Name_6, pic=pic_6.jpg}}

{user={id=6, sex=0, name=Name_6, pic=pic_6.jpg}, users=[{id=0, sex=0, name=john_2_0, pic=pic_0.jpg}, {id=1, sex=1, name=john_2_1, pic=pic_1.jpg}, {id=2, sex=0, name=john_2_2, pic=pic_2.jpg}, {id=3, sex=1, name=john_2_3, pic=pic_3.jpg}, {id=4, sex=0, name=john_2_4, pic=pic_4.jpg}]}

开源库地址:https://github.com/graphql-java/graphql-java


Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐