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>
Code language: HTML, XML (xml)
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;
}
Code language: PHP (php)
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;
}
Code language: PHP (php)
Ogrenci repostitorymizi oluşturalım ve Spring Data implementasyonu yapalım.
public interface OgrenciRepository extends JpaRepository<Ogrenci,Long> {
List<Ogrenci> getByNumara(String numarasi);
}
Code language: PHP (php)
Ş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);
}
}
Code language: PHP (php)
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
}
Code language: JavaScript (javascript)
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;
}
}
Code language: PHP (php)
Programımızı çalıştıralım ve localhost:8080/_graphql adresinde veri erişimi olduğunu görebiliriz.
No Comment! Be the first one.