Learn how to get started with Graphql using spring boot framework. In this session, you will be learning like how to add the schema details and mapping the function and request payload with Graphql @MutationMapping into your controller class. So you can preform like Save, update and delete operation using graphql You need Spring web, JPA, Mysql, Lombok and Spring Graphql dependencies to your pom module.
schema.graphqls (This file should be created inside the resources/graphql folder)
type Query{
findAll: [User]
userById(id: ID): User
}
type User{
id: ID
name: String
gender: String
emailId: String
}
type Mutation{
addUser(userDetails: UserDetails): User
updateUser(userDetails: UserDetails): User
deleteUser(id: ID): String
}
input UserDetails{
id: ID
name: String
gender: String
emailId: String
}
UserGQLController .java
package com.hakeemit.graphql.controller;
import com.hakeemit.graphql.entity.User;
import com.hakeemit.graphql.entity.UserDetails;
import com.hakeemit.graphql.service.UserServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
import java.util.List;
@Controller
public class UserGQLController {
@Autowired
private UserServices userServices;
@QueryMapping
public List findAll(){
return userServices.getAllUser();
}
@QueryMapping
public User userById(@Argument int id){
return userServices.userById(id);
}
@MutationMapping
public User addUser(@Argument UserDetails userDetails){
return userServices.add(userDetails);
}
@MutationMapping
public User updateUser(@Argument UserDetails userDetails){
return userServices.update(userDetails);
}
@MutationMapping
public String deleteUser(@Argument int id){
return userServices.delete(id);
}
}
@QueryMapping will be the entry point just like REST API Get Mapping.
UserServices .java
package com.hakeemit.graphql.service;
import com.hakeemit.graphql.entity.User;
import com.hakeemit.graphql.entity.UserDetails;
import com.hakeemit.graphql.repositories.UserRepositories;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserServices {
@Autowired
private UserRepositories userRepositories;
public User userById(int id){
Optional user = userRepositories.findById(id);
return user.get();
}
public List getAllUser(){
return userRepositories.findAll();
}
public User add(UserDetails userDetails){
User user = new User();
user.setName(userDetails.getName());
user.setGender(userDetails.getGender());
user.setEmailId(userDetails.getEmailId());
return userRepositories.save(user);
}
public User update(UserDetails userDetails){
Optional user = userRepositories.findById(userDetails.getId());
if(user.isPresent()) {
user.get().setName(userDetails.getName());
user.get().setGender(userDetails.getGender());
user.get().setEmailId(userDetails.getEmailId());
return userRepositories.save(user.get());
}
return null;
}
public String delete(int id){
Optional user = userRepositories.findById(id);
if(user.isPresent()) {
userRepositories.delete(user.get());
return "Deleted";
}
return "Failed to delete";
}
}
pom.xml add the 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-graphql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
Start running your application
Comments
Post a Comment