graphql----java使用
前言
前一篇,已经讲了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
更多推荐
所有评论(0)