Spring Boot

Spring Boot ile GraphQL Kullanmak Örnek Uygulama

Spring Boot kullanarak GraphQL’deki veri işlemlerinin nasıl olacağını örnek bir proje ile yapacağız. Bu projemizde H2 veritabanımızdan GraphQl ile bir veri yapısı oluşturup bu yapıyı kullanacağız. Veritabanı arasında bir köprü görevi gören GraphQl uygulaması yapalım.

Bir Spring Boot projesi oluşturalım. Spring Boot projemizin maven bağımlılıkları aşağıdaki gibidir.

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java-tools</artifactId>
            <version>5.2.4</version>
        </dependency>
        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-spring-boot-starter</artifactId>
            <version>5.0.2</version>
        </dependency>
    </dependencies>

Ogrenci entitymizi oluşturalım.

@Entity
@Table
@Getter
@Setter
public class Ogrenci implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String adi;
    private String soyadi;
    private int numara;
    private String sinifi;
}

Dto’muzu oluşturalım. Veritabanı ile client tarafına taşıyacağımız DTO muzu oluşturalım.

@Data
public class OgrenciDto {
    private String numarasi;
    private String adi;
}

Ogrenci repostitorymizi oluşturalım ve Spring Data implementasyonu yapalım.

public interface OgrenciRepository extends JpaRepository<Ogrenci,Long> {
    List<Ogrenci> getByNumara(String numarasi);
}

Şimdide GraphQL modelimizi oluşturacağımız GraphQLQueryResolver implementasyonu yapıp gerekli metotlarımızı oluşturacağız. Bu metotlarımız controller görevi görmektedir.

@Component
@RequiredArgsConstructor
public class OgrenciQueryResolver implements GraphQLQueryResolver {

    private final OgrenciRepository _ogrenciRepository;

    public List<Ogrenci> getOgrenci(String numarasi) {
        return _ogrenciRepository.getByNumara(numarasi);
    }
}

resources klasörü altında ogrenci.graphqls dosyamızı oluşturuyoruz.

type Ogrenci {
    id: ID!,
    adi: String!,
    soyadi: String,
    numara: String,
    sinifi: String
}

input OgrenciDto {
    numarasi: String!,
    adi: String
    }

type Query {
    getOgrenci(numarasi: String):[Ogrenci]
    getByNumarasi(id: ID):Ogrenci
}

type Mutation {
    createOgrenci(ogrenci: OgrenciDto):Ogrenci
}

Sonrasında ise GraphQL’den OgrenciQueryResolver‘i implement edeceğimiz OgrenciMutationResolver oluşturuyoruz.

@Component
@RequiredArgsConstructor
public class OgrenciMutationResolver implements GraphQLMutationResolver {

    private final OgrenciRepository _ogrenciRepository;

    public Ogrenci createVehicle(OgrenciDto ogrenciDto) {
        return _ogrenciRepository.save(dtoToEntity(ogrenciDto));
    }

    private Ogrenci dtoToEntity(OgrenciDto ogrenciDto) {
        Ogrenci ogrenci = new Ogrenci();
        ogrenci.setAdi(ogrenciDto.getAdi());
        ogrenci.setSoyadi(ogrenciDto.getNumarasi());
        return ogrenci;
    }
}

Programımızı çalıştıralım ve localhost:8080/_graphql adresinde veri erişimi olduğunu görebiliriz.

More in:Spring Boot

You may also like

Leave a reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir