Share
Embed
Transcript
45 slides
-
8IPBN* w ,PUMJO (SBQI2- ZFBS w 0QFO4PVSDFLPUMJOHSBQIRMTBNQMF w -PWF,PUMJO w
8PSLTGPS6CJF *OD @shiraji @shiraj_i -
w 4&-&$5 '30.ESVHXIFSFJEJO / 1SPCMFN w 4&-&$5
'30.DPNQBOZXIFSFJE w 4&-&$5 '30.DPNQBOZXIFSFJE w 4&-&$5 '30.DPNQBOZXIFSFJE -
/ XJUIHSBQIRMKBWBTUBSUFS val context = GraphQLContext(httpServletRequest, httpServletResponse) context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_companies_by_drugs_id”,
DataLoader.newDataLoader<Long, Company> { companyIds, _ -> }c )b )a return context -
/ XJUIHSBQIRMKBWBTUBSUFS val context = GraphQLContext(httpServletRequest, httpServletResponse) context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_companies_by_drugs_id”,
DataLoader.newDataLoader<Long, Company> { companyIds, _ -> CompletableFuture.supplyAsync { }d }c )b )a return context -
/ XJUIHSBQIRMKBWBTUBSUFS val context = GraphQLContext(httpServletRequest, httpServletResponse) context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_companies_by_drugs_id”,
DataLoader.newDataLoader<Long, Company> { companyIds, _ -> CompletableFuture.supplyAsync { // SELECT * FROM company where company_id in (1, 2, 3) drugService.getCompanyByIds(companyIds) }d }c )b )a return context -
/ XJUIHSBQIRMKBWBTUBSUFS @Component class DrugResolver : GraphQLResolver<Drug> { @Suppress("unused") fun
getCompany(drug: Drug): Company {a companyService.getCompanyById(drug.companyId) }a }b -
/ XJUIHSBQIRMKBWBTUBSUFS @Component class DrugResolver : GraphQLResolver<Drug> { @Suppress("unused") fun
getCompany(drug: Drug, env: DataFetchingEnvironment): Company {a companyService.getCompanyById(drug.companyId) }a }b -
/ XJUIHSBQIRMKBWBTUBSUFS @Component class DrugResolver : GraphQLResolver<Drug> { @Suppress("unused") fun
getCompanies(drug: Drug, env: DataFetchingEnvironment): CompletableFuture<List<Company>>? {a companyService.getCompanyById(drug.companyId) }a }b -
/ XJUIHSBQIRMKBWBTUBSUFS @Component class DrugResolver : GraphQLResolver<Drug> { @Suppress("unused") fun
getCompanies(drug: Drug, env: DataFetchingEnvironment): CompletableFuture<List<Company>>? {a }a }b -
/ XJUIHSBQIRMKBWBTUBSUFS @Component class DrugResolver : GraphQLResolver<Drug> { @Suppress("unused") fun
getCompanies(drug: Drug, env: DataFetchingEnvironment): CompletableFuture<List<Company>>? {a return env .getDataLoader<Long, List<Company>>(“key_companies_by_drugs_id”) }a }b -
/ XJUIHSBQIRMKBWBTUBSUFS @Component class DrugResolver : GraphQLResolver<Drug> { @Suppress("unused") fun
getCompanies(drug: Drug, env: DataFetchingEnvironment): CompletableFuture<List<Company>>? {a return env .getDataLoader<Long, List<Company>>(“key_companies_by_drugs_id”) .load(drug.companyId) }a }b -
/ XJUIHSBQIRMKBWBTUBSUFS @Component class DrugResolver : GraphQLResolver<Drug> { @Suppress("unused") fun
getCompanies(drug: Drug, env: DataFetchingEnvironment): CompletableFuture<List<Company>>? {a return env .getDataLoader<Long, List<Company>>(“key_companies_by_drugs_id”) .load(drug.companyId) }a }b val context = GraphQLContext(httpServletRequest, httpServletResponse) context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_companies_by_drugs_id”, DataLoader.newDataLoader<Long, Company> { companyIds, _ -> CompletableFuture.supplyAsync { // SELECT * FROM company where company_id in (1, 2, 3) drugService.getCompanyByIds(companyIds) }d }c )b )a return context -
"TTPDJBUFLFZXJUIWBMVF val context = GraphQLContext(httpServletRequest, httpServletResponse) context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_companies_by_drugs_id”, DataLoader.newDataLoader<Long,
Company> { companyIds, _ -> CompletableFuture.supplyAsync { // SELECT * FROM company where company_id in (1, 2, 3) drugService.getCompanyByIds(companyIds) }d }c )b )a return context w 0SEFSNBUUFS w DPNQBOZ*ET <$PNQBOZ JE $PNQBOZ JE $PNQBOZ JE > w DPNQBOZ*ET <$PNQBOZ JE OVMM $PNQBOZ JE > -
$PNQMFYSFMBUJPOT type Drug { id: ID! company: Company! kinkiDrugs: [Drug!]
} w 0OFESVHIBTNVMUJQMF,JOLJESVHT w %SVHTNJHIUIBWFTBNF,JOLJESVHT -
w 4&-&$5 '30.ESVHXIFSFJEJO w 4&-&$5 '30.LJOLJ@ESVHXIFSFESVH@B@JEJO
w 4&-&$5 '30.ESVHXIFSFJEJO $PNQMFYSFMBUJPOT -
JE ESVH@B@JE ESVH@C@JE
w 4&-&$5 '30.LJOLJ@ESVHXIFSF ESVH@B@JEJO w :FT ESVH@C@JEJT CVUEVQMJDBUFE LJOLJ@ESVH $PNQMFYSFMBUJPOT -
"TTPDJBUFLFZXJUIWBMVF val context = GraphQLContext(httpServletRequest, httpServletResponse) context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_companies_by_drugs_id”, DataLoader.newDataLoader<Long,
Company> { companyIds, _ -> CompletableFuture.supplyAsync { // SELECT * FROM company where company_id in (1, 2, 3) drugService.getCompanyByIds(companyIds) }d }c )b )a return context w 0SEFSNBUUFS w DPNQBOZ*ET <$PNQBOZ JE $PNQBOZ JE $PNQBOZ JE > w DPNQBOZ*ET <$PNQBOZ JE OVMM $PNQBOZ JE > -
context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_kinki_drugs_by_drugs_id”, DataLoader.newMappedDataLoader<Long, Drug> { drugIds, _ -> CompletableFuture.supplyAsync
{ // SELECT * FROM kinki_drug where drug_a_id in (1, 2, 3) val kinkis = kinkiDrugService.getKinkiDrugs(drugsIds) // SELECT * FROM drug where id in (4, 5, 6) val drugs = drugService.getDrugs(kinkis.map { it.drugBId }) }d }c )b )a -
context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_kinki_drugs_by_drugs_id”, DataLoader.newMappedDataLoader<Long, Drug> { drugIds, _ -> CompletableFuture.supplyAsync
{ // SELECT * FROM kinki_drug where drug_a_id in (1, 2, 3) val kinkis = kinkiDrugService.getKinkiDrugs(drugsIds) // SELECT * FROM drug where id in (4, 5, 6) val drugs = drugService.getDrugs(kinkis.map { it.drugBId }) // Create Map<KinkiDrug, List<Drug>> val kinkiMap = kinkis.associateWith { kinkiDrug -> drugs.filter { it.id == kinkiDrug.drugBId } }x }d }c )b )a -
context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_kinki_drugs_by_drugs_id”, DataLoader.newMappedDataLoader<Long, Drug> { drugIds, _ -> CompletableFuture.supplyAsync
{ // SELECT * FROM kinki_drug where drug_a_id in (1, 2, 3) val kinkis = kinkiDrugService.getKinkiDrugs(drugsIds) // SELECT * FROM drug where id in (4, 5, 6) val drugs = drugService.getDrugs(kinkis.map { it.drugBId }) // Create Map<KinkiDrug, List<Drug>> val kinkiMap = kinkis.associateWith { kinkiDrug -> drugs.filter { it.id == kinkiDrug.drugBId } }x // Create Map<Long, List<Drug>> drugIds.associateWith { drugId -> kinkiMap.filter { entry -> entry.key.drugAId == drugId }.values.flatten() } }d }c )b )a -
context.setDataLoaderRegistry( DataLoaderRegistry().register( “key_kinki_drugs_by_drugs_id”, DataLoader.newMappedDataLoader<Long, Drug> { drugIds, _ -> CompletableFuture.supplyAsync
{ // do whatever you want }d }c )b )a .BLFDVTUPN#BUDI-PBEFS -
@Component class DrugDataLoader : MappedBatchLoader<Long, List<Drug>> { override fun load(ids:
Set<Long>?): CompletionStage<Map<Long, List<Drug>>> { return CompletableFuture.supplyAsync { // do whatever you want }a }b }c .BLFDVTUPN#BUDI-PBEFS -
4USJOH,FZ /BWJHBUJPO context.setDataLoaderRegistry( DataLoaderRegistry().register( // Use class name DrugDataLoader::class.qualifiedName, DataLoader.newMappedDataLoader(drugDataLoader)
)b )a @Component class DrugDataLoader : MappedBatchLoader<Long, List<Drug>> { override fun load(ids: Set<Long>?): CompletionStage<Map<Long, List<Drug>>> { return CompletableFuture.supplyAsync { // do whatever you want }a }b }c @Suppress("unused") fun getKinkiDrugs(drug: Drug, environment: DataFetchingEnvironment): CompletableFuture<List<Drug>>? { return environment // Use class name .getDataLoader<Long, List<Drug>>(DrugDataLoader::class.qualifiedName) .load(drug.id) }b -
@Component class DrugDataLoader : MappedBatchLoader<Long, List<Drug>> { override fun load(ids:
Set<Long>?): CompletionStage<Map<Long, List<Drug>>> { return CompletableFuture.supplyAsync { // do whatever you want }a }b }c .BLFDVTUPN#BUDI-PBEFS .PDLBOEUFTUMPBENFUIPE -
4USJOH,FZ /BWJHBUJPO val context = GraphQLContext(httpServletRequest, httpServletResponse) context.setDataLoaderRegistry( DataLoaderRegistry().register( cDrugDataLoader::class.qualifiedName,
// cache survive until drugDataLoader DataLoader.newMappedDataLoader(drugDataLoader) )b )a return context @Component class DrugDataLoader : MappedBatchLoader<Long, List<Drug>> { // keep cache here override fun load(ids: Set<Long>?): CompletionStage<Map<Long, List<Drug>>> { return CompletableFuture.supplyAsync { // do whatever you want }a }b }c