中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么利用Spring?Boot和JPA創建GraphQL?API

發布時間:2022-04-27 14:35:40 來源:億速云 閱讀:251 作者:iii 欄目:開發技術

本篇內容主要講解“怎么利用Spring Boot和JPA創建GraphQL API”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么利用Spring Boot和JPA創建GraphQL API”吧!

一、生成項目

https://start.spring.io/并生成一個項目,不要忘記添加Spring Web、H2數據庫和Spring DATA JPA依賴項。

怎么利用Spring?Boot和JPA創建GraphQL?API

1. 添加依賴項

要啟用GraphQL的使用,請在下面添加這兩個依賴項。

<dependency>
  <groupId>com.<a href="https://javakk.com/tag/graphql" 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模式定義了通過API可用的數據點。模式描述了數據類型及其關系,以及可用的操作,例如檢索數據的查詢和創建、更新和刪除數據的突變。

在resources文件夾中,創建一個擴展名為“.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

怎么利用Spring?Boot和JPA創建GraphQL?API

現在創建一個名為Location的實體。該位置應該有三個屬性:idnameaddress,如模式中所述。當然,也會產生 Getters, Setters, 和 Constrictors。

然后,在本例中,存儲庫只使用CrudRepository,并擴展位置實體。

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

四、Queries & Exceptions

1. 查詢

查詢允許我們檢索數據。每個查詢可以有一個特定的對象,它完全基于查詢中指定的字段返回,您可以添加或刪除字段以匹配您需要的確切數據,以適合您的特定用例。

創建一個解析器包,然后添加一個實現GraphQLQueryResolver的新查詢類,并添加@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允許它更新存儲在服務器上的數據。與查詢不同,創建、更新或刪除等Mutator會改變數據。

現在創建一個mutator包,然后添加一個實現GraphQLMutationResolver和添加@Component注釋的新類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

創建一個異常包,然后添加一個新的類LocationNotFoundException,該類擴展RuntimeException并實現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;
    }

到此,相信大家對“怎么利用Spring Boot和JPA創建GraphQL API”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邻水| 宜都市| 安图县| 西昌市| 固阳县| 西城区| 高台县| 奈曼旗| 宝丰县| 焦作市| 常宁市| 四平市| 凉山| 新兴县| 石门县| 昔阳县| 治多县| 南岸区| 永济市| 云南省| 登封市| 深水埗区| 巧家县| 大姚县| 阳新县| 饶河县| 贡嘎县| 二手房| 敖汉旗| 横峰县| 南部县| 德州市| 中阳县| 黑龙江省| 景德镇市| 定远县| 高密市| 桂林市| 纳雍县| 西乌| 延庆县|