GraphQL

您所在的位置:网站首页 title服装 GraphQL

GraphQL

#GraphQL| 来源: 网络整理| 查看: 265

GraphQL GraphQL是Facebook 开发的一种查询语言,用于在复杂的应用程序的数据模型中,描述数据要求。 官网:http://graphql.org/ GraphQL-Java:https://github.com/graphql-java/graphql-java

GraphQL这个词刚入我眼帘没多久,刚开始也只是看了一下简介而已。由于本人编程能力和知识储备不好,最近想用一个一个小项目来实践一下,采用Java语言写一个web项目,打算使用Java中对我来说全新的知识,经过细想后决定采用struts2框架+bootstrap框架(后台管理)+MUI框架(移动端),一边学习一边做项目,让自己在实践中获取到更多的知识。

在写到数据库连接的时候,本来是想用C3P0来管理数据库连接的,想起前两天在开源中国看到另一个数据库连接池HikariCP,数据显示它比C3P0性能更好,然后就采用了HikariCP,毕竟我这次的目的是学习新的知识,所以毅然用了它。

eclipse+maven(现学现用)+struts2(现学现用)+bootstrap(用过几次)+MUI(现学现用)

GraphQL-Java github示例代码:

import graphql.schema.GraphQLObjectType; import graphql.schema.GraphQLSchema; import java.util.Map; import static graphql.Scalars.GraphQLString; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; public class HelloWorld { public static void main(String[] args) { GraphQLObjectType queryType = newObject() .name("helloWorldQuery") .field(newFieldDefinition() .type(GraphQLString) .name("hello") .staticValue("world")) .build(); GraphQLSchema schema = GraphQLSchema.newSchema() .query(queryType) .build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); Map result = graphQL.execute("{hello}").getData(); System.out.println(result); // Prints: {hello=world} } }

百度了GraphQL-Java的相关用法:http://blog.csdn.net/qq362228416/article/details/50854980

我把上面这为朋友的代码直接复制粘贴运行,发现无法得到正确的数据,打印出来的信息全是xxx=null,当时很纳闷,我这半桶水的知识对这百来行代码无法找出问题所在。然后只能尝试结合官方的示例代码和前面这位朋友的用法,尝试着写。

前期准备工作:写一个结构类

public class ZyVo { //专业类 private int id, xy, readnum; private String code, title, text, jc, pic, general; //.....getXXX,setXXX }

然后编写GraphQL与上面这个类的结构对应信息:

//import graphql.Scalars;//相关包 GraphQLObjectType beanVo = newObject().name("zy") .field(newFieldDefinition().name("id").type(Scalars.GraphQLInt).build())//类型一定要与结构类字段的类型相对应 .field(newFieldDefinition().name("xy").type(Scalars.GraphQLInt).build()) .field(newFieldDefinition().name("code").type(Scalars.GraphQLString).build()) .field(newFieldDefinition().name("title").type(Scalars.GraphQLString).build()) .field(newFieldDefinition().name("jc").type(Scalars.GraphQLString).build()) .field(newFieldDefinition().name("pic").type(Scalars.GraphQLString).build()) .field(newFieldDefinition().name("general").type(Scalars.GraphQLString).build()) .field(newFieldDefinition().name("text").type(Scalars.GraphQLString).build()) .field(newFieldDefinition().name("readnum").type(Scalars.GraphQLInt).build()) .build();

之后写一个对数据进行查询的东西(我也不知道怎么描述这个东西所以就称他为东西了)

GraphQLFieldDefinition findforid = GraphQLFieldDefinition.newFieldDefinition().name("zy") .argument(//这里用GraphQL些查询语句时传入的参数 newArgument() .name("id")//参数名为id .type(Scalars.GraphQLInt)//参数类型 .build() ) .type(beanVo)//绑定GraphQL的一个结构,就是上面的那段代码 .dataFetcher(environment -> { // 获取查询参数 int id = environment.getArgument("id"); ZyProxy zyProxy = new ZyProxy();//一个对ZyVo数据进行增删改查代理的操作类 ZyVo vo = null; try { vo = zyProxy.findById(id);//通过ID查找数据 } catch (Exception e) { e.printStackTrace(); } System.out.println(vo); return vo; }).build();

//我也不懂怎么称呼下面这个代码

GraphQLSchema schema = GraphQLSchema.newSchema() .query(newObject().name("GraphQuery") .field(findforid)//半桶水不知道怎么描述它 .build() ) .build();

//写一条类似查询语句的东西,GraphQL会解析它然后返回相关的结果

String ghql = "{zy(id:1){id,title,readnum,text,pic,jc}}"; //最后就是获取结果了 ExecutionResult re = new GraphQL(schema).execute(ghql); Map result1 = (Map) re.getData(); //把它打印出来 System.out.println(result1);//结果:{zy={id=1, title=服装与服饰设计, readnum=0, text=null, pic=null, jc=null}} //可以把它加入到json对象中 JSONObject json = new JSONObject(); json.putAll(result1); System.out.println(json);//输出就成了json数据了:{"zy":{"id":1,"title":"服装与服饰设计","readnum":0}}

至此我的目的达到了,灵活定制我想要的json数据,因为有时候有的字段并不想让前端看到,用这个方法感觉很方便。

当然,我打开它方式可能很不正确,恳请各位大神展示GraphQL-Java更多的用法,小白坐等。

目前我只用它来生成我想要的json数据,因为可以很方便的定制我想要的数据,而不用更改其他Java代码,只需要改一条字符串信息就行了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3