graphql----java使用

来源:互联网 发布:大宋豪侠2java 编辑:程序博客网 时间:2024/06/05 19:06

前言

前一篇,已经讲了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


原创粉丝点击