欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Spring?Boot和JPA創(chuàng)建GraphQL?API

 更新時(shí)間:2022年04月27日 11:31:16   作者:?sofia?  
這篇文章主要介紹了利用Spring?Boot和JPA創(chuàng)建GraphQL?API,GraphQL既是API查詢(xún)語(yǔ)言,也是使用當(dāng)前數(shù)據(jù)執(zhí)行這些查詢(xún)的運(yùn)行時(shí),下文更多相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下

前言:

GraphQL既是API查詢(xún)語(yǔ)言,也是使用當(dāng)前數(shù)據(jù)執(zhí)行這些查詢(xún)的運(yùn)行時(shí)。GraphQL讓客戶(hù)能夠準(zhǔn)確地要求他們所需要的東西,僅此而已,使API隨著時(shí)間的推移更容易發(fā)展,并通過(guò)提供API中數(shù)據(jù)的清晰易懂的描述,支持強(qiáng)大的開(kāi)發(fā)工具。

在本文中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的機(jī)場(chǎng)位置應(yīng)用程序。

一、生成項(xiàng)目

https://start.spring.io/并生成一個(gè)項(xiàng)目,不要忘記添加Spring Web、H2數(shù)據(jù)庫(kù)和Spring DATA JPA依賴(lài)項(xiàng)。

1. 添加依賴(lài)項(xiàng)

要啟用GraphQL的使用,請(qǐng)?jiān)谙旅嫣砑舆@兩個(gè)依賴(lài)項(xiàng)。

<dependency>
  <groupId>com.<a  rel="external nofollow"  target="_blank" >graphql</a>-java</groupId>
  <artifactId>graphql-spring-boot-starter</artifactId>
  <version>5.0.2</version>
</dependency>
<dependency>
  <groupId>com.graphql-java</groupId>
  <artifactId>graphql-java-tools</artifactId>
  <version>5.2.4</version>
</dependency>

二、Schema

GraphQL模式定義了通過(guò)API可用的數(shù)據(jù)點(diǎn)。模式描述了數(shù)據(jù)類(lèi)型及其關(guān)系,以及可用的操作,例如檢索數(shù)據(jù)的查詢(xún)和創(chuàng)建、更新和刪除數(shù)據(jù)的突變。

在resources文件夾中,創(chuàng)建一個(gè)擴(kuò)展名為“.graphqls”的文件,全名為“location.graphqls”。

//Define the Entity attribute
type Location {
 id: ID!
 name: String!
 address: String!
}
type Query {
 findAllLocations: [Location]!
}
type Mutation {
 newLocation(name: String!, address: String) : Location!
 deleteLocation(id:ID!) : Boolean
 updateLocationName(newName: String!, id:ID!) : Location!
}

!”表示該字段為必填字段。

三、Entity 和 Repository

現(xiàn)在創(chuàng)建一個(gè)名為Location的實(shí)體。該位置應(yīng)該有三個(gè)屬性:id、nameaddress,如模式中所述。當(dāng)然,也會(huì)產(chǎn)生 Getters, Setters, 和 Constrictors。

然后,在本例中,存儲(chǔ)庫(kù)只使用CrudRepository,并擴(kuò)展位置實(shí)體。

//imports...
public interface LocationRepository extends CrudRepository<Location, Long> {
}

四、Queries & Exceptions

1. 查詢(xún)

查詢(xún)?cè)试S我們檢索數(shù)據(jù)。每個(gè)查詢(xún)可以有一個(gè)特定的對(duì)象,它完全基于查詢(xún)中指定的字段返回,您可以添加或刪除字段以匹配您需要的確切數(shù)據(jù),以適合您的特定用例。

創(chuàng)建一個(gè)解析器包,然后添加一個(gè)實(shí)現(xiàn)GraphQLQueryResolver的新查詢(xún)類(lèi),并添加@Component注釋。我們只需要添加之前在location中輸入的location.graphqls。

//imports...
@Component
public class Query implements GraphQLQueryResolver {
    private LocationRepository locationRepository;
    public Query(LocationRepository locationRepository) {
        this.locationRepository = locationRepository;
    }
    public Iterable<Location> findAllLocations() {
        return locationRepository.findAll();
    }
}

2. Mutator

GraphQL中的Mutator允許它更新存儲(chǔ)在服務(wù)器上的數(shù)據(jù)。與查詢(xún)不同,創(chuàng)建、更新或刪除等Mutator會(huì)改變數(shù)據(jù)。

現(xiàn)在創(chuàng)建一個(gè)mutator包,然后添加一個(gè)實(shí)現(xiàn)GraphQLMutationResolver和添加@Component注釋的新類(lèi)Mutation。另外,添加我們之前輸入的location.graphqls。

//imports...
@Component
public class Mutation implements GraphQLMutationResolver {
    private LocationRepository locationRepository;
    public Mutation(LocationRepository locationRepository) {
        this.locationRepository = locationRepository;
    }
    public Location newLocation(String name, String address) {
        Location location = new Location(name, address);
        locationRepository.save(location);
        return location;
    }
    public boolean deleteLocation(Long id) {
        locationRepository.deleteById(id);
        return true;
    }
    public Location updateLocationName(String newName, Long id) {
        Optional<Location> optionalLocation =
                locationRepository.findById(id);
        if(optionalLocation.isPresent()) {
            Location location = optionalLocation.get();
            location.setName(newName);
            locationRepository.save(location);
            return location;
        } else {
            throw new LocationNotFoundException("Location Not Found", id);
        }
    }

3. Exceptions

創(chuàng)建一個(gè)異常包,然后添加一個(gè)新的類(lèi)LocationNotFoundException,該類(lèi)擴(kuò)展RuntimeException并實(shí)現(xiàn)GraphQLError。

//imports...
public class LocationNotFoundException extends RuntimeException implements GraphQLError {
    private Map<String, Object> extensions = new HashMap<>();
    public LocationNotFoundException(String message, Long invalidLocationId) {
        super(message);
        extensions.put("invalidLocationId", invalidLocationId);
    }
    @Override
    public List<SourceLocation> getLocations() {
        return null;
    }
    @Override
    public Map<String, Object> getExtensions() {
        return extensions;
    }
    @Override
    public ErrorType getErrorType() {
        return ErrorType.DataFetchingException;
    }

現(xiàn)在GraphQL API已經(jīng)可以使用了!

到此這篇關(guān)于利用Spring Boot和JPA創(chuàng)建GraphQL API的文章就介紹到這了,更多相關(guān)創(chuàng)建GraphQL API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java開(kāi)發(fā)微信分享到朋友圈功能

    java開(kāi)發(fā)微信分享到朋友圈功能

    這篇文章主要為大家詳細(xì)介紹了java開(kāi)發(fā)微信發(fā)送給朋友和分享到朋友圈功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • ReentrantLock可重入鎖原理解析

    ReentrantLock可重入鎖原理解析

    這篇文章主要為大家介紹了ReentrantLock可重入鎖原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • IntelliJ IDEA 中g(shù)it的使用圖文教程

    IntelliJ IDEA 中g(shù)it的使用圖文教程

    本文通過(guò)圖文并茂的形式給大家介紹了IntelliJ IDEA 中g(shù)it的使用,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-02-02
  • 詳解springmvc 中controller與jsp傳值

    詳解springmvc 中controller與jsp傳值

    本篇文章主要介紹了springmvc 中controller與jsp傳值,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 使用Feign消費(fèi)服務(wù)時(shí)POST/GET請(qǐng)求方式詳解

    使用Feign消費(fèi)服務(wù)時(shí)POST/GET請(qǐng)求方式詳解

    這篇文章主要介紹了使用Feign消費(fèi)服務(wù)時(shí)POST/GET請(qǐng)求方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實(shí)現(xiàn)的RSA加密解密算法示例

    Java實(shí)現(xiàn)的RSA加密解密算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的RSA加密解密算法,結(jié)合實(shí)例形式分析了java RAS加密解密算法的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • 解決IDEA 2020.1版本 maven Test命令出現(xiàn)導(dǎo)包錯(cuò)誤的問(wèn)題

    解決IDEA 2020.1版本 maven Test命令出現(xiàn)導(dǎo)包錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了IDEA 2020.1版本 maven Test命令出現(xiàn)導(dǎo)包錯(cuò)誤的問(wèn)題及解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java獲取客服端信息的方法(系統(tǒng),瀏覽器等)

    java獲取客服端信息的方法(系統(tǒng),瀏覽器等)

    下面小編就為大家?guī)?lái)一篇java獲取客服端信息的方法(系統(tǒng),瀏覽器等)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • Java中的靜態(tài)內(nèi)部類(lèi)詳解及代碼示例

    Java中的靜態(tài)內(nèi)部類(lèi)詳解及代碼示例

    這篇文章主要介紹了Java中的靜態(tài)內(nèi)部類(lèi)詳解及代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java中的Null到底是什么

    Java中的Null到底是什么

    null是沒(méi)有地址,""是有地址但是里面的內(nèi)容是空的,好比做飯 null說(shuō)明連鍋都沒(méi)有 而""則是有鍋沒(méi)米,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來(lái)詳細(xì)學(xué)習(xí)一下它吧
    2019-06-06

最新評(píng)論