一、graphql如何获取数据
每个graphql中定义的字段都有一个相关联的graphql.schema.DataFetcher。
有些字段使用自定义的data fetcher代码,用于访问数据库并从数据库中获取字段信息。而大多数字段仅使用字段名称,在内存中的Map对象或或普通的Java对象(POJO)中获取数据。
在其他的GraphQL 实现当中,Data Fetcher会有时称为resolvers。
假设一个类型定义如下:
type Query {
products(match : String) : [Product] # a list of products
}
type Product {
id : ID
name : String
description : String
cost : Float
tax : Float
launchDate(dateFormat : String = "dd, MMM, yyyy') : String
}
Query.products字段有一个Data Fetcher,Product类型中的每个字段也一样。
Query.products字段的Data Fetcher可能非常复杂,包含从数据库中读取Product对象的操作。它使用一个可选的match参数,进而可以对products结果中的对象进行过滤。
其示例如下:
DataFetcher productsDataFetcher = new DataFetcher<List<ProductDTO>>() {
@Override
public List<ProductDTO> get(DataFetchingEnvironment environment) {
DatabaseSecurityCtx ctx = environment.getContext();
List<ProductDTO> products;
String match = environment.getArgument("match");
if (match != null) {
produc